我有非常简单的表结构,我存储我的数据库的音乐,因为音乐是用不同的语言,所以我用歌曲song_language排序歌曲。表结构是这样的
id title song_language
我有100万张不同语言的近似歌曲但是当我试图过滤掉它时会扫描该特定语言的所有歌曲。如果我说song_language ='Eng'它将扫描所有500000首歌曲,但我只想要3首歌曲,而我的专栏song_language很好地编入索引。这是我的查询
SELECT * FROM tableA WHERE song_language='Eng' limit 6
它需要0.0009秒才能执行,所以我很高兴,但解释说了不同的东西
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tableA ref song_language song_language 167 const 462591 Using where
按排序后输出
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tableA ref song_language primary 4 null 11 Using where
所以我认为它不使用索引,当我执行这个查询时,我的上一个查询需要0.0035秒而没有订单只花了0.0009秒
任何人都可以对这个奇怪的解释输出有所了解吗?
答案 0 :(得分:1)
如果您使用限制,则可能需要在该查询上添加ORDER BY
。如果它在非索引列上进行排序,则可以解释意外的查询计划。