Where子句使用键列仍然会出错

时间:2017-03-22 13:41:54

标签: mysql

我有一个表作为另一个表的外键查找。该表非常简单,包含一个ID列,其中包含主键和JSON列。我希望从此表中删除已放弃的条目。

我试过运行这个脚本:

DELETE 
FROM `ate`.`test_configuration`
WHERE `ate`.`test_configuration`.`ID` NOT IN (SELECT DISTINCT `ate`.`index`.`TestID` from `ate`.`index`);

但是遇到一个错误,说明我没有使用使用键列的where子句:

  

错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE的表要禁用安全模式,请切换首选项中的选项 - > SQL编辑器并重新连接。

这很令人困惑,因为我的where子句确实使用了主键列。我知道我可以disable safe mode as part of my script作为解决方法,但仍然想了解我为什么会收到此错误。如果可能的话,我想避免不安全的更新。

1 个答案:

答案 0 :(得分:0)

我认为Optimizer无法有效地使用索引进行此类查询 - 因此它会进行全表扫描。

test_configuration中有多少行以及将删除多少行?

(您可能尝试使用索引提示强制优化器为查询使用索引,只是不确定它们是否在您的mysql版本中受支持)。