「4000万の名前を使用したワイルドカード検索に最適なインデックスの作成」という別の質問がありました。さて、あなたは4000万のレコードを持っています。
次の式を検討してください:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
列のインデックスははるかに優れており、x
に近くなります。 1の場合、すべての値が異なり、重複がないため、インデックスは非常に高速です。
今、あなたは'john%'を探しています。それは4文字とオープンエンドです。どの文字が重要ではない場合、DBは26 * 26 * 26 * 26=456976の個別の値を処理する必要があります。それを上記の式と4000万件のレコードに入れてください。 x
を取得します の0,0114244。
再びしきい値が何であるかはわかりませんが、IIRCは0,1か何かです。したがって、x
の場合 0.1を超える場合はインデックスが使用され、低い場合は使用されません。
どうしてこんなことに?インデックスを使用すると、処理速度が低下する可能性があります。DBはインデックスを確認し、そのインデックスで適切なレコードが物理ハードドライブのどの位置にあるかを確認してから、そのレコードを取得する必要があります。したがって、xが10%未満の場合は、テーブル全体のスキャンを実行するだけの方が高速です。
要約すると、あなたのような弱いインデックスが1つしかない4,000万件のレコードをフィルタリングすることは、まったく役に立ちません。