sql >> データベース >  >> RDS >> Mysql

MySQLのインデックス作成とファイルソートの使用

    最初のクエリでは、ORDERBYはviews_pointを使用して実行されます INDEX。クエリのWHERE部分で使用されたため、MySQLでは並べ替えに使用できます。

    2番目のクエリでは、MySQLは別のインデックスlisting_pcsを使用してWHERE部分を解決します。 。これは、ORDERBY条件を満たすために使用することはできません。 MySQLは代わりにfilesortを使用します。これは、インデックスを使用できない場合に最適なオプションです。

    MySQLは、インデックスがWHERE条件で使用されているものと同じである場合にのみ、インデックスを使用してソートします。これは、マニュアル です。 意味:

    では、何ができるでしょうか:

    1. sort_buffer_sizeを増やしてみてください ファイルソートを可能な限り効果的にするためのconfigオプション。ソートバッファに対して大きすぎる結果が大きいと、MySQLはソートをチャンクに分割しますが、これは遅くなります。

    2. MySQLに別のインデックスを選択させる。 MySQLのバージョンが異なれば、デフォルトのインデックスの選択も異なることに注意してください。たとえば、バージョン5.1は、クエリオプティマイザがこのリリース用に大幅に書き直されており、多くの改良が必要だったため、かなり悪いものです。バージョン5.6はかなり良いです。

      SELECT *
      FROM listings
      FORCE INDEX (views_point)
      WHERE (`publishedon_hourly` BETWEEN
             UNIX_TIMESTAMP( '2015-09-5 00:00:00' )
             AND UNIX_TIMESTAMP( '2015-09-5 12:00:00' ))
        AND (published =1)
        AND cat_id IN ( 1, 2, 3, 4, 5 )
      ORDER BY `views_point` DESC
      LIMIT 10
      


    1. 事前入力されたデータベースはAPI28で機能せず、そのようなテーブル例外はスローされません

    2. ClusterControlを使用してMariaDBレプリケーションを監視するためのヒント

    3. パーティションごとの結合のための高度なパーティションマッチング

    4. Mysql:複数のテーブルまたは1つの大きなテーブル?