是否使用“限制1”加快对主键的查询?
如果我有一个主键说id
和我做的关键,例如一个简单的查询,是否使用“限制1”加快对主键的查询?
SELECT id FROM myTable WHERE id = X
它会找到一个行,然后停止寻找,因为它是一个主键,或会是更好地通过使用LIMIT 1
告诉mysql限制其选择?例如:
SELECT id FROM myTable WHERE id = X LIMIT 1
是的。这里没有必要进行表扫描:这是基于键的查找。匹配的行被找到,这是过程的结束。
酷感谢.... – cgweb87
使用“限制1”加快对主键的查询吗?是或否,你的答案建议“不”,但是说“是”。 – TarranJones
@TarranJones:我不明白你为什么认为它表示“不”。 –
有没有必要担心这种“优化”。
只会提取一行 - 每个唯一的索引合同 - 并且数据库能够很快地找到所有的(1)行。它能够做到这一点是因为支持索引(或主键)的底层结构支持按值快速查找。没有涉及表扫描。 (通常是B树的一个变种,但它可能是基于哈希的,等等,我想智能查询优化器也可以根据唯一的约束传递额外的提示,但我不'对此足够了解。)
谢谢,我的数据库拥有超过500,000行的唯一键,并且只是试图加快性能。 – cgweb87
@ cgweb87您可以随时运行测试。我怀疑“没有变化”,但是如果你发现一个明显的差异,那么1)利润2)编写后续SO问题3)更多利润:) – 2011-12-11 20:23:45
@ cgweb87不要忘记分析查询计划,以及测量挂钟时间。 – 2011-12-11 20:27:43
你为什么不试试? –
我该如何尝试?它总是只返回1行,我想知道它是否在找到主键后停止全表扫描! – cgweb87
@ cgweb87:请确认我对您的问题所做的修改使其更加清晰,而不是进一步偏离您的意图。 –