如果这个MySQL UPDATE语句在表变大时变慢,如何加快速度?
我有以下简单的MySQL更新语句如果这个MySQL UPDATE语句在表变大时变慢,如何加快速度?,mysql,sql,Mysql,Sql,我有以下简单的MySQL更新语句 UPDATE TableA SET columnX = ( CASE WHEN (ColumnB = 'Criteria_Met') then ( 0 ) END ); 我担心上面使用CASE的UPDATE语句会很慢。这是因为不符合条件的行将被分配为NULL。看 这意味着,如果表中有数百万行,
UPDATE TableA
SET columnX =
(
CASE
WHEN (ColumnB = 'Criteria_Met')
then ( 0 )
END
);
我担心上面使用CASE的UPDATE语句会很慢。这是因为不符合条件的行将被分配为NULL。看
这意味着,如果表中有数百万行,则所有不符合条件的行都将被分配为null。如果有许多行,这将需要时间。这样的更新语句不是很慢吗?如果是,是否有解决方案?如果列已为空,则无需再次更新。因此,您可以执行以下操作:
UPDATE TableA
SET columnX =
(
CASE
WHEN (ColumnB = 'Criteria_Met')
then ( 0 )
ELSE null
END
)
WHERE columnX IS NOT NULL;
在这种情况下,您将只更新正在更改的行。为columnX和columnB编制索引也是一个好主意,这样可以快速扫描它们 怎么样
UPDATE TableA
SET columnX = 0
WHERE ColumnB = 'Criteria_Met';
这符合第一个代码,即,以前columnX为0的任何记录都将保留为0
在这种情况下,我将避免where子句效率更高的任何情况,特别是如果ColumnB被索引的话
如果我们认为,如第二个代码所建议的那样,必须为所有记录更新CulnNx,那么我可能会测试运行两个查询的运行时间:
UPDATE TableA SET ColumnX = NULL;
UPDATE TableA
SET columnX = 0
WHERE ColumnB = 'Criteria_Met';