假设我有一个显示博客帖子的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏。但是,为用户显示注释计数,如果用户单击计数,则会调用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 我想确保查询不会进行全表扫描这就是为什么我总是习惯添加限制。
答案 0 :(得分:5)
这在许多层面都是错误的。你正在为一个只能单独工作的查询添加一个相对较低的开销(即使它需要一些完成:见Bill的回答)
如果您构建了正确的查询(和正确的模型),则不会出现任何性能问题。通过尝试这样的小技巧,你将会
1-在某个时候出现性能问题(请参阅优秀的mysql性能博客article关于desc和限制优化器问题的订单)
2-在你的代码中制作一个意大利面条(我首先想知道你的代码是:“为什么会这样?”。而且,这样的事情加起来,最后,这是很多“噪音“坚持主线,这是我的建议”
3-有意想不到的结果(如果你的2个查询之间突然出现第16条评论怎么办?)
这是出于好意,但我认为这是一个坏主意。
答案 1 :(得分:-6)
您希望限制加入结果集的结果集...您也不想猜测LIMIT
是什么,因为记录会发生变化。返回结果集的子集需要付出代价。