sql >> データベース >  >> RDS >> Oracle

参加に時間がかかりすぎる

    関連するすべてのフィールドを見ると、各テーブルのカバーインデックスにはmay列が含まれます

    t1: Y, F, H, A
    t2: X, G, C, D, E
    

    t2.X、t2.Gまたはt1.Y、t1.F、t1.Hのいずれかの基準はどの程度選択的ですか?

    個々の列のいずれも十分に選択的でない場合(理想的には0.5%以下)、たとえば、複数の列を含む1つまたは複数のカバーインデックスを作成することができます。

    t2 (G, X)
    t1 (H, F, Y)
    

    注: インデックス内の列の順序は非常に重要です。常に最も選択的なもの(列データを最も明確なセットに分割するもの)を最初に配置します。

    ストレージを犠牲にして、インデックス自体に必要なすべての列を提供することにより、インデックスをクエリでカバーすることができます。これは、クエリがテーブルデータに戻る必要がまったくないことを意味します。

    create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
    create index ix_t1 on t1 (H,F,Y) INCLUDE (A)
    

    編集

    そこにSQLServerDDLを挿入したようです。 Oracleでは、インデックスを拡張してt2(G、X、C、D、E)にする必要がありますが、インデックスキーが非常に長くなるため、インデックス使用の選択性要件が高くなります。




    1. MySQLにデータを挿入するときの「エラー1136(21S01):列数が行1の値数と一致しない」を修正

    2. Dockerで実行されているPostgresデータベースがハングし続ける

    3. フレーズ検索演算子<->は、JSONBドキュメントで機能しますか、それともリレーショナルテーブルでのみ機能しますか?

    4. where句のサブクエリの2つの列