这是我的桌子:

在我的桌子上
Clustering_key (主键和自动增量)ID (索引栏)Data (文本数据类型列)Position(索引列)维护Data的顺序我的表有9万行,ID相同,等于5。
Select * from mytable where ID=5 Limit 3;ID列是索引列,所以我认为mysql只扫描前3行,但mysql扫描了大约42000行。
在这里解释查询:

避免所有行扫描的任何可能性。
请给我一些解决办法
提前感谢
发布于 2018-12-07 05:45:34
EXPLAIN并不像人们所希望的那么聪明。它提供了42415而没有注意到您的LIMIT 3。
表示它将使用索引的重要线索是Key列列出索引名。
使用该索引(我假设ID是一个数字数据类型),该查询只涉及3行索引,然后是3行数据。
获得更多信息的两种方法:
EXPLAIN FORMAT=JSON SELECT ...;或
FLUSH STATUS;
SELECT ...
SHOW SESSION STATUS LIKE 'Handler%';我希望在一两行中看到2 (3-1),而不会看到与表大小相匹配的数字。
发布于 2019-01-18 20:39:39
作为@Rick关于获取更多信息的补充,如果安装和启用了Performance,您可以使用足够的权限在MySQL工作台中执行查询,然后通过GUI获得详细的执行信息(请参阅执行查询后的“查询统计”一节)。您只需要监视级别“服务器默认”的性能架构就可以自动完成此操作。适用于像您这样的情况和其他快速查询,特别是在暂存环境或开发机器上。
当我在复制的设置中执行您的查询时,我在报告中看到只检查了3行。
https://dba.stackexchange.com/questions/222951
复制相似问题