【发布时间】:2014-12-13 17:09:14
【问题描述】:
我有一个包含两列的表:id(主键)和writtenForm(VARCHAR 255)。总行数约为 850.000。
我需要执行以下查询:
SELECT writtenform FROM `dedict_uniqueWF` order by id LIMIT 1,20000
此查询需要 10 多分钟。当我运行解释查询时,它似乎没有使用索引。知道为什么吗?
解释查询:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE dedict_uniqueWF ALL NULL NULL NULL NULL 836753 Using filesort
解释表:
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
writtenForm varchar(255) YES NULL
同时我添加了一个新索引。在解释查询中仍然有相同的结果。 显示索引:
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
dedict_uniqueWF 0 PRIMARY 1 id A 836753 NULL NULL BTREE
dedict_uniqueWF 1 writtenForm 1 writtenForm A 836753 NULL NULL YES BTREE
添加强制索引使用子句将在解释查询中得到完全相同的结果(使用文件排序):
explain SELECT writtenform FROM `dedict_uniqueWF` use index(PRIMARY) order by id LIMIT 1,20000
【问题讨论】:
-
嘿,你找到并阅读了这个答案吗:stackoverflow.com/questions/12148943/… ?
-
有趣的主键默认是索引的,应该考虑索引。你能检查一下表上的索引吗
show indexes from dedict_uniqueWF -
当你强制使用主要(
SELECT ... FROM ... USE KEY FOR ORDER BY ...)时会发生什么? -
@Abhik Chakraborty:我在主要问题中添加了显示索引
标签: mysql performance limit