私は次の質問に対する簡潔な答えを見つけようとしてきました。たくさん読みましたが、まだ確信が持てません。シナリオは非常に異なる可能性があるため、単純な答えはないかもしれません。
しかし、ここに質問があります:
1) すべてのレコードが 0 または 1 の tinyint 列にインデックスを付ける必要がありますか?
postActive 列のすべてのレコードが 0 または 1 であるクエリの例:
SELECT postId, postName, postTitle
FROM postTable
WHERE postDate > Now()
AND postActive = 1
2) テーブル内で一意の代替 int 値を持つレコードを除いて、すべてのレコードが 0 である int 列にインデックスを付ける必要がありますか?
この例では、列 orderProcessingId はテーブル内で 100% 一意 (ゼロ以外) になり、大部分のレコードの orderProcessingId は 0 になります。
SELECT orderId, orderInformation, orderData, orderStuff
FROM orderTable
WHERE orderProcessingId = 38457237
これらの両方のテーブルには、数十万のレコードがあります。
私が疑問に思っている理由は、パフォーマンスを向上させるために、インデックス作成が比較的分散された値の頻度に依存しているように見えるからだと思います。ただし、例 1 では両方の値 (および 2 つのみ) の頻度が非常に高く、例 2 では 1 つの値 (0) の頻度が非常に高く、例外の繰り返し頻度はありません。
しかし、私のアイデアはすべて推測に基づいています...そうです。あなたは私に何を教えてくれますか?