LIMIT In MYSQL 使用全索引扫描而不是范围扫描

LIMIT In MYSQL uses full index scan and not range scan

我有一个名为 'emp' 的 table,包含列 emp_id(主键)、姓名、出生日期、电子邮件,有 500 万行。以下查询使用全索引扫描。

select emp.emp_id from emp limit 2500000, 100000;

MySQL计划:

为什么mysql不能执行范围扫描,它对4 548 256行执行全索引扫描?

想想电话簿。如果我让你按名字找人,电话簿的本质是一个排序列表,所以你可以很快找到名字。

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

按名称搜索是查找特定名称或名称范围。但重要的是这是按值搜索,而不是按条目位置搜索。

LIMIT 查询不是按值查找,而是按位置查找。该索引无助于此。要获得查询结果,MySQL 必须从 table.

的第一行开始计算所有行

要使您的查询成为范围扫描,它必须按值搜索:

SELECT emp.emp_id FROM emp WHERE emp.emp_id BETWEEN 2500000 AND 2600000;

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