首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不扫描所有行的情况下在查询我的索引列中使用限制?

如何在不扫描所有行的情况下在查询我的索引列中使用限制?
EN

Database Administration用户
提问于 2018-11-20 08:40:44
回答 2查看 1.1K关注 0票数 3

这是我的桌子:

在我的桌子上

  • Clustering_key (主键和自动增量)
  • ID (索引栏)
  • Data (文本数据类型列)
  • Position(索引列)维护Data的顺序

我的表有9万行,ID相同,等于5。

代码语言:javascript
复制
Select * from mytable where ID=5 Limit 3;

ID列是索引列,所以我认为mysql只扫描前3行,但mysql扫描了大约42000行。

在这里解释查询:

避免所有行扫描的任何可能性。

请给我一些解决办法

提前感谢

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-12-07 05:45:34

EXPLAIN并不像人们所希望的那么聪明。它提供了42415而没有注意到您的LIMIT 3

表示它将使用索引的重要线索是Key列列出索引名。

使用该索引(我假设ID是一个数字数据类型),该查询只涉及3行索引,然后是3行数据。

获得更多信息的两种方法:

代码语言:javascript
复制
EXPLAIN FORMAT=JSON SELECT ...;

代码语言:javascript
复制
FLUSH STATUS;
SELECT ...
SHOW SESSION STATUS LIKE 'Handler%';

我希望在一两行中看到2 (3-1),而不会看到与表大小相匹配的数字。

票数 3
EN

Database Administration用户

发布于 2019-01-18 20:39:39

作为@Rick关于获取更多信息的补充,如果安装和启用了Performance,您可以使用足够的权限在MySQL工作台中执行查询,然后通过GUI获得详细的执行信息(请参阅执行查询后的“查询统计”一节)。您只需要监视级别“服务器默认”的性能架构就可以自动完成此操作。适用于像您这样的情况和其他快速查询,特别是在暂存环境或开发机器上。

当我在复制的设置中执行您的查询时,我在报告中看到只检查了3行。

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

https://dba.stackexchange.com/questions/222951

复制
相关文章

相似问题

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