私は、注文が重要な複数の列のインデックスを作成するときに、通常、WHERE句に最初に表示される列がORDER BYしかし、別々にインデックスを作成するだけでスピードアップすることはできませんか? (明らかに私自身の実験では、結合されたインデックスの振る舞いは、単にそれぞれを別々にインデックス化するよりもずっと速いことがわかります)。どのような場合に複数列のインデックスを使用する必要がありますか?いつMYSQLの1つのインデックスよりも2つより良いインデックス
答えて
マルチカラムインデックスは、すべての条件がマルチカラムインデックスの一部である場合に最も効果的です。複数の単一インデックスを持つよりもさらに効果的です。
マルチカラムインデックスを使用していて、マルチカラムインデックスでインデックスされた最初のカラムを使用していない場合(または、最初から開始していない、使用されているインデックス)、マルチカラムインデックスは何のメリットもありません。 (たとえば、列[B、C、D]にインデックスがあり、[C、D]のみを使用するWHEREがある場合は、このマルチカラムインデックスには効果がありません)。
参照:http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html :インデックス内のすべての 列をテストするクエリ、または試験ちょうど最初の列、 最初の2列、第3列、などクエリに複数列のインデックスを使用することができ
のMySQL。インデックス定義で正しい順序で列を と指定した場合、単一の 複合インデックスは、同じ テーブルで複数の種類のクエリを高速化できます。
2番目のステートメントは、少なくともSQL Serverでは100%正しいとは言えませんが、MYSQLと同じものと思われます。 –
@MitchWheat - 正確であることが確認されたMySQLのドキュメントからの回答を更新しました。 – ziesemer
私は、colA、colB、colCのインデックスがcolB + colCのカラムでクエリで使用されることがありますが、colAではないという事実を指していました。 –
短い答えは、「それは依存します」です。
長い答えはこれです:あなたは時々
WHERE COL1 = value1 and COL2 = value2
を行い、時には
WHERE COL1 = value1
決して、あるいはほとんどない操作を行い、その後、複合インデックスを
WHERE COL2 = value2
をすれば(COL1、COL2)が最適です。 (MySQLの場合はもちろん、DBMSの他のメーカーやモデルと同様に)
インデックスの数が増えると、INSERTとUPDATEの操作が遅くなるため、空き領域にはなりません。
複合インデックス(C1、C2)次の場合に非常に有用である:
- C1 = V1とC2 = v2の
- 明白な場合、あなたはWHERE C1 = V1とC2との間をすればv2とv3 - 複合インデックスの "レンジスキャン"を行います。
- SELECT ... FROM t WHERE c1 = v1 ORDER BY c2 - この場合、インデックスを使用して結果を並べ替えることができます。いくつかの場合、「カバー指数」として、例えば、 "SELECT c1、c2 FROM t WHERE c1 = 4"はテーブルの内容を無視し、インデックスから(範囲)をフェッチするだけです。
- 1. MySQLは2つのインデックスを1つに結合します
- 2. 複数の列インデックスがmysqlの単一列インデックスよりも遅い
- 3. 2dsphere対2dインデックス:「より良い」/より速い?
- 4. MySQLインデックス:2つのフィールドのインデックス方法の違いは何ですか?
- 5. 空間インデックスと2つの座標インデックス
- 6. 2つの配列間の最も近い点のインデックス
- 7. 2つの同じ列を持つMySQLインデックス
- 8. MySQLインデックス:1つのキー名複数の列または1列あたり1つのキー名?
- 9. Codeigniterアクティブレコード "JOIN" 2つのインデックス
- 10. TFS - 良い練習 - 1つのステーションでより多くのユーザー
- 11. 2つのカラムを持つMySQLインデックスは、そのうちの1つは外部キーです
- 12. 2つのJava RPC呼び出しまたは1つより
- 13. 2つのインデックスのmysql結合に時間がかかります!
- 14. (DBMS内の)インデックスが不良インデックスとなるのはいつですか?
- 15. どのように2つのテーブルmysqlのインデックスを作成するには?
- 16. Mysqlとインデックスの2つのカラムのユニークな制約
- 17. 2つのテーブルの同じインデックス名
- 18. 同じインデックス番号を持つように2つの配列をマージする
- 19. マーカーのZインデックスがInfoboxのZインデックスより高い
- 20. 2つの列は1つの列、または1つの列はインデックスされます
- 21. 複数のインデックスを持つDoctrine 2
- 22. もう1つのjava.lang.IndexOutOfBoundsException、しかしインデックス<size
- 23. 3つのインデックスまたはSQL Server 2008の2つの列を持つ単一のインデックス?
- 24. MySQLは私は2つの表1は、インデックスと別である必要があり
- 25. mysqlのは、私は2つのテーブルを持っているクエリとインデックス
- 26. Z-インデックスを持つDiv:9999がZ-インデックスのiframeによって隠されています:-1 IE8-
- 27. パンダのjsonへの2つのインデックスを持つデータフレーム
- 28. Pythonの2つのリストのインデックス値を見つける
- 29. 距離行列の5つの最も近いサンプルのインデックスを見つける
- 30. 配列へのインデックスのリスト。配列[インデックス]が複製されているインデックスを見つけよう
はい。そしてそれは... –