gpt4 book ai didi

mysql - 如何改进 MySQL 子查询中的 LIMIT 子句?

转载 作者:行者123 更新时间:2023-11-29 03:31:55 24 4
gpt4 key购买 nike

我有两个表:posts 有 10k 行和 comments 我需要为特定数量的 posts 选择所有 comments 换句话说,通过 posts 表实现分页,并获取其中的所有 comments。为此,我有下一个查询:

select * from  comments c 
inner join (select post_id from posts o order by post_id limit 0, 10) p
on c.post_id = p.post_id;

查询的性能对我来说也很重要。但是此查询的 Explain 非常奇怪,因为 LIMIT 子句遍历 9976 行 但不是我预期的 10 行:

enter image description here

与此同时,当我单独运行子查询时,它可以很好地按预期迭代 10 行:

explain select post_id from posts o order by post_id  limit 0, 10

enter image description here

还有 indexesposts(post_id), comments(comment_id), comments(post_id) 上。我不明白该查询有什么问题,因此它遍历了 posts 表中的所有记录。如果有人能帮助我解决这个问题,我将不胜感激。

最佳答案

首先,您的 qwuery 没有遍历 9976 行。 Explain 显示查询将读取的行数的估计值(实际上,它会生成大量执行计划并丢弃除成本估计值最低的以外的所有执行计划)。

对于限制 0,10,它可能会读取更少的行(取决于索引的配置方式)但是当要求解决限制 10000, 10 时,它会读取更多

关于mysql - 如何改进 MySQL 子查询中的 LIMIT 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com