【发布时间】:2012-02-13 02:45:39
【问题描述】:
我正在写一个查询:
select * from table_name order by id limit 21
在我使用限制小于或等于 20 之前,扫描的行等于准确的获取行(例如,如果限制为 10,则扫描的行也只有 10)。如果限制超过 20,则表将被完全扫描。
仅为主键 id 创建的唯一一个索引。有人能说出这种情况下全表扫描的原因吗?
我的表有 1099 行。
Explain Result:
---------------------------------------------------------------------------
id|selecttype|table |type|possiblekeys|keys|key_len|ref |rows| Extra
---------------------------------------------------------------------------
1 | SIMPLE |tablen|ALL | null |null|null |null|1099|Usingfilesort
---------------------------------------------------------------------------
【问题讨论】:
-
你确定你在
table_name(id)上有索引吗? -
你能像这样测试你的查询吗:select id from table_name order by id limit 21,请在你的问题中添加解释结果和表结构
-
查询慢吗?表有多少行?如果您只有几百行,那么对
LIMIT 100进行整体扫描是优化器认为更快的方法。 -
请提供您的表格结构
-
请不要将回复作为答案发布,如果您想添加更多信息,请编辑您的问题,或将 cmets 留在您收到的答案下方。
标签: mysql indexing sql-order-by