LIMIT 子句是否使更新更快? (任何数据库引擎)
Does LIMIT clause makes updating faster? (Any database engine)
例如:
UPDATE tab_name SET col_name=? WHERE col_name='a_unique_str' LIMIT 1;
列 col_name
没有索引,但我们知道 'a_unique_str'
确实是唯一的。 LIMIT 1
是否使这样的查询更快?
(做一个简单的基准测试并不难,但我想知道它在不同的数据库中是否以相同的方式工作,或者与数据库调优有什么可能的联系。)
(有些数据库如 Oracle 没有 LIMIT
。我想它们都有它们的等效子句。)
如果您真的想了解某个特定的数据库,那么您应该在该数据库上测试代码。
但是,代码应该更快。 limit 1
表示在更新一行后停止,因此它将在第一次匹配后停止。如果没有 limit 1
,数据库必须考虑所有可以匹配条件的行。如果没有索引,这需要查看所有行中的值。
如果匹配的行是最先遇到的行之一,速度的提高可能会非常大。或者,如果匹配行靠近 ned,则可以忽略不计。期望查询将进行完整的 table 扫描,而 limit 1
将节省完整 table 扫描的一半。
例如:
UPDATE tab_name SET col_name=? WHERE col_name='a_unique_str' LIMIT 1;
列 col_name
没有索引,但我们知道 'a_unique_str'
确实是唯一的。 LIMIT 1
是否使这样的查询更快?
(做一个简单的基准测试并不难,但我想知道它在不同的数据库中是否以相同的方式工作,或者与数据库调优有什么可能的联系。)
(有些数据库如 Oracle 没有 LIMIT
。我想它们都有它们的等效子句。)
如果您真的想了解某个特定的数据库,那么您应该在该数据库上测试代码。
但是,代码应该更快。 limit 1
表示在更新一行后停止,因此它将在第一次匹配后停止。如果没有 limit 1
,数据库必须考虑所有可以匹配条件的行。如果没有索引,这需要查看所有行中的值。
如果匹配的行是最先遇到的行之一,速度的提高可能会非常大。或者,如果匹配行靠近 ned,则可以忽略不计。期望查询将进行完整的 table 扫描,而 limit 1
将节省完整 table 扫描的一半。