mySQL:更新大型数据库中记录的最有效方法?

时间:2011-05-11 11:23:04

标签: php mysql performance optimization

假设我有一张包含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

3 个答案:

答案 0 :(得分:5)

假设record_ID是主键,这绝对是更新单个记录的最快方法。

答案 1 :(得分:1)

如果record_ID是主键,则第一个解决方案是最快的。我认为放置“LIMIT 1”不是必要的,因为它隐含在主键

答案 2 :(得分:1)

值得注意的是,这两个命令实际上在功能上并不相同。 您应该始终运行查询,这将执行您想要执行的操作。

数据库中的优化器会搞清楚。 在这种情况下,即使你同时指定它们,它也必须访问行的位置才能删除它,与首先导航到行相比,读取列的额外WHERE是一个非常小的惩罚。

另请注意,在没有ORDER BY的情况下使用LIMIT会破坏复制和恢复二进制日志的序列化,以便在STATEMENT模式下进行时间点恢复。

在这种情况下,最好在WHERE中指定所需的所有内容,而不需要LIMIT。

相关问题