テーブル内の4列にわたる複合ユニークインデックスと、列のうちの2つを個別にフィルタリングするパフォーマンス上の問題を伴うクエリがあります。恐らく疑問な質問ですが、パフォーマンスを向上させるために個々の列をインデックス化する必要がありますか?助けてくれてありがとう!すでにコンポジットインデックスの一部である個々の列をインデックスする必要がありますか?
答えて
ジョーの答えが正しくないので、私はこの質問に答えています。
Oracle 9では、スキップ・スキャンと呼ばれる新しいタイプの索引スキャンが導入されました。これにより、先行しない列に索引を使用することができます。詳細はdocumentationで説明されています。
ほとんどのデータベースでは、ほとんどの状況でインデックスが左から右に使用されます。ただし、Oracleのスキップ・スキャン・メカニズムは例外で、他のデータベースの索引付けアルゴリズムを拡張しています。
プラスワン:私は今日何か新しいことを学んだ! –
答えはどちらの列に依存しますか。複合インデックスは、一番左の列のサブセットに使用できます。あなたのインデックスが(A、B、C、D)になっていて、AとBでフィルタリングしているなら、あなたはいいですね。一方、BとCをフィルタリングしている場合は、このインデックスは役立たず、新しいインデックスを作成する必要があります。
返信いただきありがとうございます。私が正しく理解していることを確認するために、私がフィルタリングしている列はAとCでした。その場合は、Cにインデックスを追加するだけです –
@TheGilbertArenasDagger AとCの場合、既存の(A、B、C、D)インデックスはAフィルタに使用できますが、Bの後に来るのでCのヘルプはありません。そのクエリパターンを完全にサポートするための(A、C)インデックスを作成します。 –
あなたはトレードオフを扱います。インデックスが小さいほど処理速度が速くなります。ある例では2つの列だけを試してみましょう。テーブルXに文字列AとBがあるとします。
いいえいいえ、私はA + BのインデックスとB + Aのインデックスを作成します。
これは私にちょうどAまたはちょうどBのためのインデックスを使用することができます。しかし、インデックスを読む際には、SQLエンジンはA + BまたはB + Aのより多くの合計データ量を読み取る必要があります。だから、これはちょうどAまたはBのための1つを持っていた場合よりも遅いです。なぜ4つのインデックスに入れないのですか?あなたはそれを行うことができますが、4つの異なるインデックスを維持する必要があるため、挿入を遅くするようになりました。
正確な正解はありません。他のものは違いに影響します。どのSqlエンジンを使用するか、ベンダーのSQLエンジンのバージョン。これらのアクションの利点と欠点の基本的なダイナミクスを理解する。それをあなたのデータセットとあなたのデータベースを使っているもののより良い理解と組み合わせてください。たとえば、AレコードごとにBレコードが3つ以上あることはめったにありません。複合インデックスを持つことはあまり役に立ちません。エンジンが索引を使用して3つのレコードを検索し、どれを返すかを選択する方が速いでしょう。
結果は異なる場合があります。しかし、これはエンジニアリングのトレードオフの状況です。
- 1. Mysql:一意のフィールドはインデックスである必要がありますか?
- 2. Entity Frameworkで個々のプロパティを個別に更新する必要がありますか?
- 3. spannableStringの一部を削除する必要があります
- 4. 一部の列の既定値を変更する必要があります
- 5. テーブルを削除する場合は、外部キー/インデックスを個別に削除する必要があります。
- 6. ユニバーサルアプリ、個別にターゲティングする必要がありますか?
- 7. フレックスのメニューバーコントロール、個々のメニュー項目の別個のメソッドを処理する必要があります
- 8. PDOException:SQLSTATE [HY000]:一般エラー:7個のパラメーターの数が0から65535の間である必要があります。
- 9. Jenkins Pipeline jenkinsFileをリポジトリの一部にする必要がありますか?
- 10. Android:ListViewアダプタをViewModelクラスの一部にする必要がありますか?
- 11. Ruby標準ライブラリの一部であるファイルを `Gemfile`に追加する必要がありますか?
- 12. Elasticsearchがインデックスで始まらず、エイリアス名が一意のエラーである必要があります
- 13. API内でページングのインデックスをゼロにする必要がありますか?
- 14. 一部のフラグがテーブル内で有効であることを確認する必要があります
- 15. 主キーにインデックスを付ける必要がありますか?
- 16. TenantId列のインデックスを作成する必要がありますか?
- 17. 仮想インデックスを削除する必要がありますか?
- 18. ボタンが最下部にある必要があります
- 19. Hibernateテーブルの@id列にインデックスを作成する必要があります
- 20. インデックスの名前はデータベース内で一意である必要がありますか?
- 21. コンポーネントタイプの名前は、カスタムコンポーネントで一意である必要がありますか?
- 22. forループの一部であるセルでFormulaを使用する必要があります
- 23. 固定キーでパーティションのインデックスを作成する必要がありますか?
- 24. このクエリでインデックスを使用する必要がありますか?
- 25. このシナリオでインデックスを使用する必要がありますか?
- 26. マイクロサービスエコシステム内の個々のサービスにビジネスロジックを含める必要がありますか?
- 27. Oracleの主キー列にインデックスを付ける必要があります
- 28. は、イマクロコードの一部のみをループする必要があります
- 29. 私は選択する必要がありますインデックス(MySQLの)
- 30. 個人用のプロジェクトにソフトウェアホスティングソリューションを使用する必要がありますか?
あなたのインデックスのスキーマとクエリを表示してください – scaisEdge