通过PK搜索查询的LIMIT是有益的

时间:2013-05-05 01:37:58

标签: mysql sql join limit

假设我有一个显示博客帖子的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏。但是,为用户显示注释计数,如果用户单击计数,则会调用ajax调用来加载所有注释。

通常我会做一些额外的编码来从页面中获取注释计数,然后将其发送到后端,以便我可以限制查询。所以不要这样......

SELECT * FROM comments INNER JOIN post WHERE post.id = 1

我可以这样做......

SELECT * FROM comments INNER JOIN post WHERE post.id = 1 LIMIT 15

所以现在我已经实现了这个我想知道,对于通过主键搜索故意告诉查询如何在主键上行的查询有什么好处?我做了一个带有和没有限制的SQL EXPLAIN,但它们是相同的。我主要担心的是我问这个问题的原因是b / c 我想确保查询不会进行全表扫描这就是为什么我总是习惯添加限制。

2 个答案:

答案 0 :(得分:5)

这在许多层面都是错误的。你正在为一个只能单独工作的查询添加一个相对较低的开销(即使它需要一些完成:见Bill的回答)

如果您构建了正确的查询(和正确的模型),则不会出现任何性能问题。通过尝试这样的小技巧,你将会

1-在某个时候出现性能问题(请参阅优秀的mysql性能博客article关于desc和限制优化器问题的订单)

2-在你的代码中制作一个意大利面条(我首先想知道你的代码是:“为什么会这样?”。而且,这样的事情加起来,最后,这是很多“噪音“坚持主线,这是我的建议”

3-有意想不到的结果(如果你的2个查询之间突然出现第16条评论怎么办?)

这是出于好意,但我认为这是一个坏主意。

答案 1 :(得分:-6)

您希望限制加入结果集的结果集...您也不想猜测LIMIT是什么,因为记录会发生变化。返回结果集的子集需要付出代价。