假设我有一张包含1000条记录的表,我只想更新一条记录。如果我指定更多'WHERE'子句以将搜索范围缩小到更少的匹配记录,或者仅仅声明一个WHERE子句(例如.dordID),它是否会使查询更快?
示例:
UPDATE table
SET record_name = 'new name'
WHERE record_ID = 'x'
LIMIT 1
或
UPDATE table
SET record_name = 'new name'
WHERE record_ID = 'foo'
AND record_city = 'bah'
LIMIT 1
答案 0 :(得分:5)
假设record_ID是主键,这绝对是更新单个记录的最快方法。
答案 1 :(得分:1)
如果record_ID是主键,则第一个解决方案是最快的。我认为放置“LIMIT 1”不是必要的,因为它隐含在主键
中答案 2 :(得分:1)
值得注意的是,这两个命令实际上在功能上并不相同。 您应该始终运行查询,这将执行您想要执行的操作。
数据库中的优化器会搞清楚。 在这种情况下,即使你同时指定它们,它也必须访问行的位置才能删除它,与首先导航到行相比,读取列的额外WHERE是一个非常小的惩罚。
另请注意,在没有ORDER BY的情况下使用LIMIT会破坏复制和恢复二进制日志的序列化,以便在STATEMENT模式下进行时间点恢复。
在这种情况下,最好在WHERE中指定所需的所有内容,而不需要LIMIT。