为什么限制会使此查询更快

时间:2012-06-07 13:28:16

标签: optimization limit

我在这里提出的另一个问题引发了另一个问题。 我有这个查询

SELECT `Qty`, `Invt`, `ClassNr`, `SubPartCode`, `Description`, `DesignCode`, `Measure`, `Remark`, `PartMnem`
FROM (`loodvrij_receptuur` lr)
JOIN `loodvrij_artikel` la ON `la`.`PartCode` = `lr`.`SubPartCode`
WHERE `lr`.`PartCode` =  'M2430A'
ORDER BY `SubPartCode`, `Qty` desc

我遇到的问题是它在phpmyadmin中的执行速度比CodeIgniter快。我发现它与phpmyadmin自动添加LIMIT 30

有关

但我想知道的是,查询只产生27个结果。 LIMIT 30如何使查询更快?我可以理解,使用LIMIT 30可以更快地返回30个或更多结果的查询,但是当您添加LIMIT 30时,少于30个结果的查询会如何变得更快?

2 个答案:

答案 0 :(得分:1)

我认为您假设限制30仅在查询结束时发挥作用。如果我让你看看电话簿中所有人的姓氏以字母T开头,并住在纽约,你必须拿出50,000个名字,然后查看哪些是在纽约。如果我告诉你我只需要30,你不需要抽出50,000个名字,你可以看看纽约的人,然后选择前30个名字以T开头。

SQL查询通常会以最有效的方式解决,因此通过添加LIMIT 30,引擎盖下的内容会发生变化,使查询执行得更快。

答案 1 :(得分:0)

问题不在于查询返回多少结果,而是查询必须查看多少项。使用LIMIT 30,您要求的是在获得前30个结果后停止运行。

如果你不限制结果,sql仍会搜索,直到它到达基数的末尾。因此,即使你得到的结果少于30,也必须加倍努力。

我不知道自己是否清楚,对不起我糟糕的英语。