私は、おそらく数百万行のサイズになるMYSQLデータベースのテーブルにコンポジットインデックスを追加する方法を検討しています。コンポジットは、2つのvarcharカラムと3つのintカラムで構成されます。私の質問はタイトルに記載されています:この複合インデックスを作成する最適な順序はありますか?たとえば、int行のうちの1つは6つの可能な値しか持たないため、その列がインデックス定義の前面に近いほうがよいでしょうか?同様に、varcharカラムの1つは、おそらくインデックス定義の前または後ろにあるはずの数百万の異なる値を持つでしょうか?MYSQLコンポジットインデックスを注文する最適な方法はありますか?
答えて
大まかには、複数列インデックスでは、インデックス内で基数が最も高い列、つまり最も重複する値の列が最初に来るようにします。
より正確にするには、できるだけ一致の少ない列を最初に検索し、できるだけ結果セットを絞り込むことができますが、一般的には最高の基数と同じです。
したがって、例では、6つの異なる値を持つ列の前に、数百万の異なる値を持つ列が索引に存在することが必要です。
数百万の値から1つの行だけを選択していると仮定すると、より多くの行をより早く除去することができます。
類似のカーディナリティの2つの列を考えるときは、小さいものを最初に(INTEGER列をVARCHAR列の前に)配置します。これは、MySQLがそれらを比較してより高速に反復できるからです。
範囲(たとえばWHERE datecol > NOW()
)を使用して選択する場合は、範囲の列が最も右側に、列が単一の定数(たとえば、WHERE id = 1
)を左側に置きます。これは、インデックスが最初の範囲値のポイントまでの検索と並べ替えにしか使用できないためです。
カーディナリティは必ずしも適切な基準ではありません。インデックス内の最初の列には2つの値しかなく、後続の列にはカーディナリティが高くなります。これは、インデックスが常に2つの値のうちの1つだけを使用する特定の検索用に設計されており、その値が結果セットを95%減らすためです。正しい質問は、どの列が結果セットを最も減らすかであり、カーディナリティーはほんの便利なルールです。 –
@カイ、あなたのコメントは私を混乱させる。たぶん具体例を挙げることができます。 –
@MarcusAdams私はカイのことを理解している、私はそれがここでかなりうまく説明されていると思う:http://www.percona.com/blog/2009/06/05/a-rule-of-thumb-for-choosing-column index-in-indexes/ –
- 1. MySQLクエリ(グループと注文)を最適化する方法
- 2. typescriptビルドで最初にファイルを注文する方法はありますか?
- 3. CIカスタム注文をクエリする方法はありますか
- 4. SPARQLクエリを最適化する方法はありますか?
- 5. mysql select文を適切に最適化する方法
- 6. Select文をOrder by Orderにする方法はありますか? (最短距離で注文する)
- 7. このテーブルに最適なSQL文はありますか?
- 8. mysqlの注文方法は?
- 9. MYSQLの+グループ別の注文...最速の方法ですか?
- 10. mysqlの範囲クエリでコンポジットインデックスを使用する方法
- 11. 繰り返し注釈の値を取得する適切な方法はありますか?
- 12. mysqlの最適化:現在の注文と前の注文は別のテーブルにあるか、同じテーブルにフラグの列があるはずですか?
- 13. 最も頻繁なMySQL SELECTクエリを最適化する方法
- 14. 文字列に文法的なケーシングを適用する簡単な方法はありますか?
- 15. MySQLのSQL文で構文エラーをデバッグする方法はありますか?
- 16. Python:Word文書に脚注を追加する方法はありますか?
- 17. この小さなコードをよりエレガントで最適な方法で書く方法はありますか? (ES6)
- 18. MYSQLの最適化を支援するソフトウェアはありますか?
- 19. 複数の結合でMySQLクエリを最適化する方法はありますか?
- 20. このコードを最適化する方法はありますか?
- 21. tableLayoutPanelのデータを最適化する方法はありますか?
- 22. これを最適化する他の方法はありますか?
- 23. このクエリを最適化する方法はありますか?
- 24. このPerlファイルを最適化する方法はありますか?
- 25. このLINQ to Entitiesクエリを最適化する方法はありますか?
- 26. このneo4jクエリを最適化する方法はありますか?
- 27. PyGTK:ウィンドウの最適サイズを計算する方法はありますか?
- 28. 次のチェックボックスを最適化する方法はありますか?
- 29. このC#コードを最適化する方法はありますか?
- 30. 下記のプログラムを最適化する良い方法はありますか?
範囲ではなく、WHERE句に定数を選択していますか? –
Marcus、私はおそらく、このテーブルへのクエリの大多数の定数を選択します。 – chicagoCrazy