批量更新几百万条数据,速度太慢怎么办?怎样做到优化?
表信息:
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