如果这个MySQL UPDATE语句在表变大时变慢,如何加快速度?

如果这个MySQL UPDATE语句在表变大时变慢,如何加快速度?,mysql,sql,Mysql,Sql,我有以下简单的MySQL更新语句 UPDATE TableA SET columnX = ( CASE WHEN (ColumnB = 'Criteria_Met') then ( 0 ) END ); 我担心上面使用CASE的UPDATE语句会很慢。这是因为不符合条件的行将被分配为NULL。看 这意味着,如果表中有数百万行,

我有以下简单的MySQL更新语句

    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';