1

假设我有一个显示博客文章的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏。但是,评论计数会在其位置为用户显示,如果用户单击计数,则会进行 ajax 调用以加载所有评论。

通常我会做一些额外的编码来从页面中获取评论计数,然后将其发送到后端,这样我就可以限制我的查询。所以代替这个...

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

我可以做这个...

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

所以现在我已经实现了这一点,我想知道,通过主键搜索以故意告诉查询该主键上有多少行的查询有什么好处?我做了一个有限制和没有限制的 SQL 解释,但它们是一样的。我主要关心的问题和我问这个的原因是 b/c我想确保查询不会进行全表扫描,这就是为什么我一直有添加限制的习惯。

4

2 回答 2

5

这在很多层面上都是错误的。您正在为单独运行良好的查询添加 - 相对较大的开销(即使它需要一些整理:请参阅比尔的回答)

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

1-有时出现性能问题(参见优秀的mysql性能博客关于order by desc和limit optimizer问题的文章)

2-在你的代码中做一个意大利面(我想阅读你的代码的第一件事是:“为什么会这样?”而且,这样的事情加起来,最后,这是很多“噪音”。坚持到主线,这是我的建议)

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

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

于 2013-05-05T01:46:44.377 回答
-6

你想限制你加入结果集的结果集......你也不想猜测是什么,LIMIT因为记录会改变。返回结果集的子集是有代价的。

于 2013-05-05T01:47:30.730 回答