我有一个包含一个主键的表。 我跑的时候
EXPLAIN SELECT * FROM news ORDER BY id ASC LIMIT 29
Mysql返回
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE news ALL NULL NULL NULL NULL 640 Using filesort
但是 EXPLAIN SELECT * 来自新闻 ORDER BY id ASC 限制28 它返回
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE news index NULL PRIMARY 4 NULL 28
显示来自新闻的索引;
Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment
'news', 0, 'PRIMARY', 1, 'id', 'A', 640, , '', '', 'BTREE', ''
'news', 1, 'tarix', 1, 'tarix', 'A', 106, , '', '', 'BTREE', ''
'news', 1, 'yayindil', 1, 'yayin', 'A', 3, , '', '', 'BTREE', ''
'news', 1, 'yayindil', 2, 'dil', 'A', 7, , '', '', 'BTREE', ''
我在其他桌子上查了一下,它们在限制4000上也能正常工作。出了什么问题?为什么只有29个限制才能使用索引?
答案 0 :(得分:0)
优化器正在尝试选择最便宜的执行路径。表中只有640行,优化器选择完整扫描并不奇怪。加载具有40000行的表,您会发现在选择全表扫描之前必须增加限制(可能大约为2000)。