行の特定のサブセットが読み込みに非常に熱いテーブルがあるとします。 people
テーブルにis_alive
というフラグがある場合と同様です。または、ソフト/論理削除を実装し、検索条件に常にis_deleted = 0
が含まれている場合。カーディナリティフラグの値を低くする必要がありますか?
これらのフィールドは、これらのテーブルのインデックスに含める必要がありますか?もしそうなら、それらはもっと左か右にあるべきですか?
people [ last_name ]
people [ zip_code ]
people [ gender ]
widgets [ category_id ]
widgets [ seller_id ]
あなたがそれらを
people [ last_name, is_alive ]
widgets [ category_id, is_valid ]
それとも
people [ is_alive, last_name ]
widgets [ is_valid, category_id ]
のように見えるようでくださいブール自体がない限り、低カーディナリティ/意義を持っている...あなたはのようなインデックスを持っているとしましょうそれらは他の検索基準とペアになっています。
ほぼ毎回使用されていますが、このフィールドはすべてのインデックスに追加されています。たぶんそれ自体が「問題」ですか?行は、同じスキーマを持つ別のテーブルにシャトルされるべきですか?基本的にフラグを分割する。
ベンダーにとらわれない。
'performance'と' Vendor Agnostic'を一緒に使うべきではありません。** EVER ** for SQL。どのように効率的であるかは、そのベンダーの実装に100%依存します。 – JNK
+1 @JNK ...私はあなたにSQL Serverのこの質問に対する回答を与えることができますが、それはSQL Serverに関連する回答に過ぎません... –
@JNKポイントは取られましたが、私は理論/ルール大文字の親指をケースバイケースで適用できます –