首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在达到大型MySQL数据库(比如100万行)之后,提供LIMIT是否有助于优化?

问在达到大型MySQL数据库(比如100万行)之后,提供LIMIT是否有助于优化?
EN

Stack Overflow用户
提问于 2016-04-05 03:28:38
回答 3查看 73关注 0票数 0

我使用PHP7,MySQL和一个小的定制论坛和一个查询来抓取7列和2个SQL join语句到一个“最新的post”页面。当我达到100万行的时候,30行的限制会停止在30行,还是每次运行都要对整个数据库排序?

我问这个问题的原因是,我正在试着思考如何对我建立的这个自定义论坛进行分页,如果必须(从理论上)阅读一百万行,那么分页是否“可以”?

编辑:我当前的查询是限制30,排序描述。

EDIT2:目前我每天收到大约500-600个帖子。它正在快速累积,所以我试图在获得100万之前对其进行监控。也就是说,我现在只查找一个表,tblTopics和topic_id,topic_name和topic_author (一个fk)。然后,我使用主题本身的外键、topic_rating和topic_category进行另一次查找。原始的查找是我有排序和限制的地方。

EN

回答 3

Stack Overflow用户

发布于 2016-04-05 03:30:19

排序应用于完整集,限制是在排序之后应用的,因此向ORDER BY查询添加限制并不会使其更快。

票数 2
EN

Stack Overflow用户

发布于 2016-04-05 06:24:50

那得看情况。

代码语言:javascript
复制
SELECT ... FROM tbl ORDER BY x LIMIT 30;
INDEX(x)

可能会使用索引并在30行后停止,而不是一百万行。

代码语言:javascript
复制
SELECT ... FROM tbl GROUP BY zz ORDER BY x LIMIT 30;

将扫描所有百万行,进行分组,写入临时表格,对临时表格进行排序,然后才交付30行。

代码语言:javascript
复制
SELECT ... FROM tbl WHERE yy = 123 ORDER BY x LIMIT 30;
INDEX(yy)

可能更喜欢INDEX(yy),很难说它的效率有多高。

代码语言:javascript
复制
SELECT ... FROM tbl WHERE yy = 123 ORDER BY x LIMIT 30;
INDEX(yy, x)

将非常高效--它不仅可以使用索引进行过滤,而且还可以用于ORDER BY和LIMIT。只有30行将被触摸。

代码语言:javascript
复制
SELECT ... FROM tbl LIMIT 30;

有可疑的用处。您将获得大约30行,但谁知道是哪30行呢?但它会很快。

好吧,这仍然没有回答你的问题。您的问题涉及JOIN。你能猜出涉及到JOIN的问题会变得多复杂吗?

如果您想讨论您的特定查询,请提供每个表的查询和SHOW CREATE TABLE,以及每个表中有多少行。

如果要将一个单行表连接到一个百万行表,那么单行表可能不会增加任何复杂性。

如果你在没有任何索引的情况下将两个百万行的表连接在一起,那么你将看到一个万亿的中间‘行’要处理!

哦,然后你会想要‘第二’30行?这增加了复杂性的另一个维度。我可以再花几个段落来说明OFFSET可能会出什么问题。

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 19:38:07

如果这个论坛有点开放式,任何人都可以发布“主题”并成为原创作者,你可能希望至少有一个主题表,其中包含PKID,姓名,作者,但也包括添加日期和最新帖子以及与之对应的帖子数量。太多时候,人们建立的网站想要到处都是计数器,并尝试做聚合,或最近的帖子,等等。提到最近的帖子,也持有最近帖子的ID,这样你就不必找到最大日期,然后在此基础上获得加入。

那么辅助表将是与给定帖子相关联的详细信息。

然后,通过您的详细信息表上的触发器,您可以对父主题id进行更新,并用count +1、现在的最近日期和刚刚创建的最新记录的ID标记它。

所以现在,连接以获取最新的上下文条目是一个简单的连接,并且不是太复杂。

在最近发布日期的主题表上建立索引,因此您现在可以获得示例:最近的30个主题,而不一定是最近的30个帖子,例如3个帖子有大量的点击量,并占了全部30个。获取30个不同的主题,然后让用户在选择感兴趣的主题时查看详细信息。你在顶层的查询永远不会违背底层的细节。

显然简要介绍了你网站的真实背景,但希望这些建议对你有意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36411255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档