首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL中的限制使用全索引扫描而不是范围扫描

问MYSQL中的限制使用全索引扫描而不是范围扫描
EN

Stack Overflow用户
提问于 2021-06-20 01:01:17
回答 1查看 69关注 0票数 1

我有一个名为'emp‘的表,其中列有emp_id (主键)、名称、道布、电子邮件,有500万行。以下查询使用完整索引扫描。

代码语言:javascript
复制
select emp.emp_id from emp limit 2500000, 100000;

MySQL计划:

​

​

​

​

为什么mysql不能执行范围扫描,而对4548 256行执行全索引扫描?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 01:35:02

想一想电话簿。如果我让您按姓名查找一个人,电话簿的本质是一个排序列表,因此您可以很快找到该姓名。

但是,如果我要求您查找电话簿中的第25,000个人,这是一个排序列表的事实对您没有帮助。你必须从这本书的开头开始数,直到数到25000。

按名称搜索是一种查找,可以查找特定名称,也可以查找一系列名称。但重要的是,这是按值搜索,而不是按条目的位置搜索。

LIMIT查询不是按值查找,而是按位置查找。索引对此无济于事。要获得查询结果,MySQL必须从表的第一行开始计算所有行。

要使您的查询进行范围扫描,必须按值进行搜索:

代码语言:javascript
复制
SELECT emp.emp_id FROM emp WHERE emp.emp_id BETWEEN 2500000 AND 2600000;

但这与您的LIMIT查询并不完全相同,因为emp_id中的值可能有间隙,而不是使用每个整数值。

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

https://stackoverflow.com/questions/68049033

复制
相关文章

相似问题

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