Optimization 为什么limit使这个查询更快

Optimization 为什么limit使这个查询更快,optimization,limit,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`.`Par

我在这里问的另一个问题引发了另一个问题。 我有这个问题

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自动添加限制30有关


但我想知道的是,这个查询只产生27个结果。
限制30
如何加快查询速度?我可以理解,使用
LIMIT 30
可以使返回30个或更多结果的查询速度更快,但是当您添加
LIMIT 30
时,返回30个或更多结果的查询如何更快?

我想您假设限制30只在查询结束时起作用。如果我让你看看电话簿上所有姓氏以字母T开头并居住在纽约的人,你必须拿出50000个名字,然后看看哪些名字在纽约。如果我告诉你我只需要30个,你就不需要拿出50000个名字,你可以看看纽约的人,然后选择前30个名字以T开头的人


SQL查询通常会以最有效的方式解决,因此,通过添加限制30,隐藏的内容将改变,以使您的查询执行得更快。

问题不在于查询返回多少结果,而在于查询必须查看多少项。对于限制30,你要求的是在得到前30个结果后停止运行

如果不限制结果,sql将继续搜索,直到到达基的末尾。因此,即使你得到的结果少于30个,它也必须更加努力


我不知道我是否说得很清楚,很抱歉我的英语很差。

好吧,我明白你的意思,但如果我看看我的问题并举例说明的话。假设您有两个电话簿,并且必须查找两个电话簿中姓氏以T开头的所有人。你不能在两个电话簿中的一个30点就停下来……这是真的,但是你在PartCode->SubPartCode上有外键关系,所以这两个搜索不是完全分开的。我同意,通常它们会有外键关系,但在这个数据库中它们没有,任何地方都没有外键。(我知道这很糟糕,但我不创建数据库)在上面的示例中,SQL可能会查看每个
loodvrij_receptuur
条目,并查看是否有
loodvrij_artikel
来进行连接。连接完成后,它将检查零件代码是否为
M2430A
。所以它必须连接每一行,然后检查哪些行与PartCode匹配。如果您将限制添加到30英寸,则不再需要这样做。它可以加入表并开始查看它们,直到有30个匹配项为止,然后它将停止。如果没有外键关系,那么速度会慢得多。如果可能的话,我建议添加一个:)好的,我知道它会在30个结果后停止,但是当你的结果少于30个时,我想它不会停止,直到它完成所有结果。。。为什么它会在某一点停止?因为它还没有达到30分的成绩…好吧,对不起,我没明白。真奇怪。你说的是多少脂肪?限制为30的查询是0.1秒,没有限制的查询是5秒。