2

私は次の質問に対する簡潔な答えを見つけようとしてきました。たくさん読みましたが、まだ確信が持てません。シナリオは非常に異なる可能性があるため、単純な答えはないかもしれません。

しかし、ここに質問があります:

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) の頻度が非常に高く、例外の繰り返し頻度はありません。

しかし、私のアイデアはすべて推測に基づいています...そうです。あなたは私に何を教えてくれますか?

4

1 に答える 1

3

私が疑問に思っている理由は、パフォーマンスを向上させるために、インデックス作成が比較的分散された値の頻度に依存しているように見えるからだと思います。

必ずしも。

すべてのレコードが 0 または 1 の tinyint 列にインデックスを付ける必要がありますか?

依存 – これらの値の分布がほぼ等しいかどうか、そうでない場合は、発生する値が大幅に少ないことにほとんど関心があるかどうかに依存します。

テーブル内で一意の代替 int 値を持つレコードを除いて、すべてのレコードが 0 である int 列にインデックスを付ける必要がありますか?

これらの希少でユニークな値の 1 つを検索しようとしているので、はい。

0(あなたが混乱していないことを願っていますNULL。ところで、整数型のエントリが value を持つものを除いて一意である場合0、ここでは UNIQUE インデックスを使用できなかったからです。)

于 2013-03-29T15:24:28.473 に答える