0

我有非常简单的表结构,我在其中存储数据库的音乐,因为音乐使用不同的语言,所以我用列 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 秒而不是我之前的查询,而没有 order by 只需要 0.0009 秒

任何人都可以对解释的这种奇怪输出有所了解吗?

4

1 回答 1

1

ORDER BY如果您使用限制,您可能希望在该查询上添加一个。如果它在非索引列上排序,则可以解释意外的查询计划。

于 2013-02-23T04:57:55.620 回答