パフォーマンスの理由から、複数の列にインデックスを作成するときに最も選択的な列を最初に置く必要があることは、どこからでも(それを説明する人は誰も説明しない) なぜですか? それは神話ですか?複数列インデックスの列順序
答えて
は私が
According to Tom最初の最も選択の列を置く必要があり、列の選択が、インデックスのすべての列を使用するクエリのパフォーマンスに影響を与えません(これは、インデックスを圧縮するOracleの機能には影響しません)。
これは最も重要なことではありません。それは考慮すべきものですが、それは物事の壮大な計画の中では比較的遠いです。
(本当に全くスキューデータと上記のような)特定の奇妙な、非常に独特かつ異常なケースでは、選択性は、簡単に使用する値に本当に依存して)彼らは
a)はかなり稀 bは、もつとも重要でできましたすべてのスキューされたクエリはすべて実行時に
です。一般的には質問を見て、それに基づいて必要なインデックスを最小限に抑えてください。
インデックス内の位置を とみなした場合、連結インデックス内の列内の別個の値の数は関係ありません。
ただし、インデックス列の順序を決定する際には、これらの考慮事項が2番目になるはずです。さらに重要なのは、索引が多くの照会に役立つことを保証することです。そのため、列の順序は、照会のwhere句(これらの列の欠落)を反映する必要があります(理由はAndreKRです)。
インデックスをどのように使用するかは、決定時に関係します。
他のすべてのことは同じですが、私はまだ最も選択的な列を最初に置きます。それはちょうど良い感じ...
更新:Another quote from Tom(milanの検索に感謝します)。オラクル5では
(はい、バージョン5!)、インデックス内 最初の最も選択列を配置するための引数がありました。
それ以来、最も差別的なエントリを最初にインデックス に入れると、インデックスが小さくなり、効率的になります。それはそうなるようですが、そうはなりません。
インデックスの場合、 のキー圧縮では、インデックスが より小さくなる可能性があるため、他の方法を実行するための説得力のある引数があります。しかし、前述のように、インデックスをどのように使用するかによって駆動されるべきです。
インデックスの圧縮情報が少しメモとしてありますが、無視してはいけません。インデックスを圧縮することはすばらしいアイデアです。 – Craig
@Craig:列の順序が索引の圧縮にどのように影響するかを見ることができますが、その逆のことはできません(繰り返しの圧縮可能な接頭辞をもたらす低カーディナリティの先頭列)。 – Thilo
Tomは** Oracle 5 **に対してhttp://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1296165726968#59899084713981 – milan
インデックスを使用しているときに右から左へ列を省略することができます。つまり、インデックスがcol_a, col_b
の場合はWHERE col_a = x
で使用できますが、WHERE col_b = x
では使用できません。
でソートされた電話帳と、次に姓でとソートされているとします。
少なくともヨーロッパとアメリカのファーストネームは、ラストネームよりも選択性がはるかに低いため、ファーストネームを検索しても結果セットが狭くならないため、正しい姓。
インデックス内の列の順序は、クエリによって決定され、選択性の考慮事項ではありません。インデックスが(a、b、c)であり、単一の列クエリの大部分が列c、その次にある場合は、インデックス定義のc、a、bの順に並べて、最高の効率を得ます。 Oracleは問合せの索引の最先端を使用することを好みますが、スキップ・スキャンと呼ばれる効率の悪いアクセス・パスで索引内の他の列を使用できます。
インデックスが選択されるほど、速いのが研究です。
単純に電話帳を想像してみてください。しかし、同じ姓の人がたくさんいる場合は、毎回ファーストネームを見ることでその人を探し出す時間が長くなります。
この問題を可能な限り避けるために、最初に最も選択的な列を指定する必要があります。
さらに、クエリでこれらの「選択性の基準」が正しく使用されていることを確認する必要があります。
+1と言っています。それはまさに正しいことです。これが行われたと仮定すると、(AndrewKR)列を右から左にドロップすることができます。 – PerformanceDBA
- 1. 複数の列のインデックスの順序
- 2. MySQLのwhere句の複数列インデックスの列の順序は重要ですか?
- 3. 変更DataGridの列の順序やインデックス
- 4. SQL Serverのインデックス - 列の順序
- 5. 整数インデックス、シンボル、文字列の間のオブジェクトプロパティの順序
- 6. PHP配列_列複数のキーが同じ順序ですか?
- 7. ブートストラップ複合列の配置順序
- 8. COPY列の順序
- 9. 順序インデックス
- 10. 複数の列の長さによるSQLの順序
- 11. SQL Serverの複数の列による動的順序
- 12. 複合インデックス:列の順序はsql server/linqのsqlに関係しますか?
- 13. PHP:配列順序
- 14. 複数のsmallint列で別個と順序を選択する
- 15. MYSQL複数列インデックス
- 16. 一意のインデックス列の順序 - 重要ですか?
- 17. 日付の列の順序
- 18. Google Cloud Datastore:列の順序はインデックス内で重要ですか?
- 19. パンダは複数の列のインデックス順を並べ替えます
- 20. 複数列インデックスの主キーの優先順位?
- 21. CATransform3D行/列の順序
- 22. PHPフォームポスト配列の順序
- 23. リバース列の順序リブレオフィスカルクで
- 24. FastMember列の順序保存
- 25. 順序「の文字列を...」
- 26. struts文字列配列の順序
- 27. 複数列のFirebird SQLインデックス
- 28. 配列出力 - インデックス構造における順序
- 29. 変更列の順序(列の数が異なる)
- 30. C#gridview列順序リセット
質問に多くの答えがありますので、私はしません – milan