Mysql索引不能在更高的限制上工作

时间:2012-01-02 23:03:30

标签: mysql query-optimization primary-key

我有一个包含一个主键的表。 我跑的时候

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个限制才能使用索引?

1 个答案:

答案 0 :(得分:0)

优化器正在尝试选择最便宜的执行路径。表中只有640行,优化器选择完整扫描并不奇怪。加载具有40000行的表,您会发现在选择全表扫描之前必须增加限制(可能大约为2000)。