批量更新几百万条数据,速度太慢怎么办?怎样做到优化?

database

表信息:

CREATE TABLE `Users` (
  `UserID` int NOT NULL AUTO_INCREMENT,
  `UserName` varchar(20) NOT NULL,
  `Age` int DEFAULT NULL,
  `Sex` tinyint DEFAULT NULL,
  `PhoneNumber` varchar(11) NOT NULL,
  `Email` varchar(20) NOT NULL,
  `IdCard` varchar(18) NOT NULL,
  `BrithDay` date DEFAULT NULL,
  `Address` tinytext,
  `Qq` char(12) DEFAULT NULL,
  `Zodiac` char(2) DEFAULT NULL,
  `Education` char(10) DEFAULT NULL,
  `Hobby` char(20) DEFAULT NULL,
  `Company` char(20) DEFAULT NULL,
  `Nation` char(5) DEFAULT NULL,
  `Marital` char(2) DEFAULT NULL,
  `Plitical` char(5) DEFAULT NULL,
  `Active` tinyint DEFAULT "0",
  PRIMARY KEY (`UserID`)
) ENGINE=InnoDB AUTO_INCREMENT=1010101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

要做的:把UserID中包含数字2的数据中Active值改为1.

首先创建一个临时表,把需要更改的数据插入到表中

CREATE TEMPORARY TABLE TmpUsers AS 
SELECT 
   Users.UserID
 , Users.Active 
FROM Users
WHERE Users.UserName LIKE "%2%"
;

在TmpUsers给UserID添加主键索引

ALTER TABLE TmpUsers ADD PRIMARY KEY IX_1(UserID)
;

按要求更改临时表中的数据

UPDATE TmpUsers
SET
   TmpUsers.Active = 1
WHERE TmpUsers.UserID LIKE "%2%"
;

建立临时表TmpUsers和原表Users连接

UPDATE Users
INNER JOIN TmpUsers ON Users.UserID = TmpUsers.UserID
SET Users.Active = TmpUsers.Active
;

通过建立临时表用主键索引来批量更改表信息,安全系数较高,运行速度快。不会影响原表的使用。

以上是 批量更新几百万条数据,速度太慢怎么办?怎样做到优化? 的全部内容, 来源链接: utcz.com/z/532397.html

回到顶部