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秒かかり、順序付けなしで0.0009秒しかかかりませんでした。

誰もがこの奇妙な説明の出力に光を当てることができますか?

4

1 に答える 1

1

ORDER BY制限を使用している場合は、そのクエリにを追加することをお勧めします。インデックスが作成されていない列で並べ替えを行っている場合、予期しないクエリ プランが説明される可能性があります。

于 2013-02-23T04:57:55.620 に答える