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

MySQLで、このクエリを高速化するためにインデックスを作成するにはどうすればよいですか?

    本当に答えを出すには、既存のインデックスがすでにあるかどうかを確認すると便利ですが...

    これはすべて、テーブル't'が存在し、インデックスを追加する必要があり、現在主キーにインデックスが1つしかないか、インデックスがまったくないことを前提としています。

    クエリのカバーインデックスはニーズに最適なパフォーマンスを提供しますが、どのインデックスでも挿入速度をいくらか犠牲にします。その犠牲がどれほど重要かは、アプリケーションのプロファイルによって異なります。あなたが主に表から読むならば、それはそれほど重要ではありません。インデックスが少ない場合は、適度な書き込み負荷でも問題ありません。テーブルの限られたストレージスペースも関係する可能性があります...トレードオフの最終評価を行い、それが目立つかどうかを確認する必要があります。良いことは、それがかなり一定のヒットであるということです。通常、インデックスを追加しても、挿入が指数関数的に遅くなることはなく、直線的に遅くなります。

    とにかく、最高のパフォーマンスを選択するためのオプションは次のとおりです。

    1. c3がテーブルtの主キーである場合、インデックスを使用してクエリを高速化するために、クエリでこれ以上のことはできません。
    2. c1が主キーtであると仮定します:

      ALTER TABLE t ADD INDEX covering_index (c3,c2);  
      
    3. c1があなたのpkではない(そしてc2でもない)場合は、これを使用してください:

      ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
      
    4. c2がPKの場合は、次を使用してください:

      ALTER TABLE t ADD INDEX covering_index (c3,c1);  
      
    5. ディスク上のスペースまたは挿入速度が問題になる場合は、ポイントインデックスを選択できます。パフォーマンスをいくらか犠牲にしますが、重いものを挿入する場合は、正しいオプションかもしれません:

      ALTER TABLE t ADD INDEX a_point_index (c3);  
      


    1. トリガーとチェック制約

    2. 日付列に基づくMySQLの週ごとのグループ化?

    3. PostgreSQLを使用したマルチデータセンターのセットアップ

    4. RACでのASHシーケンスの競合の特定