私は、おそらく数百万行のサイズになる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. Select文をOrder by Orderにする方法はありますか? (最短距離で注文する)
- 3. mysqlの最適化:現在の注文と前の注文は別のテーブルにあるか、同じテーブルにフラグの列があるはずですか?
- 4. MPDF文書に脚注を入れる方法はありますか?
- 5. PyGTK:ウィンドウの最適サイズを計算する方法はありますか?
- 6. 次のチェックボックスを最適化する方法はありますか?
- 7. このコードを最適化する方法はありますか?
- 8. このC#コードを最適化する方法はありますか?
- 9. このLINQ to Entitiesクエリを最適化する方法はありますか?
- 10. 複数の結合でMySQLクエリを最適化する方法はありますか?
- 11. Xcodeの変数型に最適なコーディング方法はありますか?
- 12. MYSQLの最適化を支援するソフトウェアはありますか?
- 13. SELECT文でMySQLからデータをフォーマットする方法はありますか?
- 14. 部分文字列を取得する最適な方法は?
- 15. IF文を書く最適な方法
- 16. mysqlにデータを保存するのに最適な方法は何ですか?
- 17. MySQLで大きなテーブルを最適化する方法
- 18. jtextareaにwysiwygを適用する方法はありますか?
- 19. マルチドメインサイトに「www」を適用する方法はありますか?
- 20. 花を注文するためのAPIはありますか?
- 21. 表示方法MySQLのある日の注文総数
- 22. 注文を使用する代わりにクエリを最適化する
- 23. 注文なしでdictsで2つのリストをアサートする方法はありますか?
- 24. .NET G.Cを最適化する方法はありますか?プログラムではない?
- 25. このmysqlをスピードアップする方法はありますか?
- 26. MySQLでprintステートメントをシミュレートする方法はありますか?
- 27. クエリ文字列がintかどうかをチェックする最適な方法は?
- 28. x86バイナリコードを最適化するライブラリはありますか?
- 29. HTMLDocument:span要素を "最適化"するSwingはありますか?
- 30. グリーディアルゴリズムを最適化する考えはありますか?
範囲ではなく、WHERE句に定数を選択していますか? –
Marcus、私はおそらく、このテーブルへのクエリの大多数の定数を選択します。 – chicagoCrazy