首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少MySQL扫描的行数

如何减少MySQL扫描的行数
EN

Stack Overflow用户
提问于 2009-11-23 14:50:37
回答 4查看 2.2K关注 0票数 0

我有一个查询,它从一个大约10,000的表中提取5条记录。索引不包含order子句,但包含where子句。

该查询扫描大约7,700行来提取这5个结果,这似乎有点多。然而,我理解排序标准的复杂性使问题变得复杂。如何才能减少扫描的行数?

该查询如下所示:

代码语言:javascript
复制
SELECT *
FROM `mediatypes_article`
WHERE `mediatypes_article`.`is_published` = 1
ORDER BY `mediatypes_article`.`published_date` DESC, `mediatypes_article`.`ordering` ASC,    `mediatypes_article`.`id` DESC LIMIT 5;

medaitypes_article.is_published已编入索引。

EN

回答 4

Stack Overflow用户

发布于 2009-11-23 14:59:44

"is_published = 1“有多少行?我想这就像是..。7.700行?

无论采用哪种方式,都必须获取与WHERE子句匹配的full结果,并按照所有排序标准对其进行完全排序。然后,所有排序的已发表文章的完整列表将在前5个结果之后截断。

查看有关ORDER BY优化的MySQL documentation article可能会对您有所帮助,但对于第一个优化,您应该尝试对ORDER BY语句中声明的列应用索引。这很可能会大大加快速度。

票数 3
EN

Stack Overflow用户

发布于 2009-11-23 15:05:59

执行OPTIMIZE TABLE可能没有帮助,但也无伤大雅。

票数 0
EN

Stack Overflow用户

发布于 2009-11-23 15:10:53

当你有排序的时候,你必须遍历所有的btree来找出正确的顺序。

要订购10,000条记录并不是很大的问题。请记住,使用适当的索引,RDBMS不会获取整个记录来确定顺序。它将btree页面中的索引列保存在磁盘上,并且只需很少的页面读取,整个btree就会加载到内存中并可以遍历。

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

https://stackoverflow.com/questions/1781478

复制
相关文章

相似问题

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