假设我有一个包含200k +行的表的数据库。
这个表有一个固定的元组,其ID为1800.其余的元组序列从300k +开始。
我有一个需要清理该表,删除所有记录而不删除一个注册ID为1800,我想出了3种查询我可能运行:删除整行表除外一行
DELETE FROM table WHERE id > 1800
DELETE FROM table WHERE id <> 1800
DELETE FROM table WHERE id NOT IN (1800)
我有一种感觉,第一一个比其他人快,但我不确定,因为所有其他数据的ID方式都大于1800.
哪一个更快,为什么?另外,如果有更快的方法删除不能删除的记录,请告诉我。
最快可能会是你想要的记录复制到一个临时表,截断表,然后插入一条记录后面 –
除非查询优化器总废话(这是非常不可能的),三是一样的。 – Damon
这取决于。如果id是(主键)(或索引字段),则三个查询将具有可比较的性能。否则:任何事情都会发生,取决于id域的索引和基数。 – wildplasser