私はSQL Serverのデータベース列に格納する必要がある文字列 "key"を持っています。このキーは、任意のサイズのトークンのドット区切りリストです。例:左からワイルドカード検索を最適化するために、SQL Serverの文字列値をどのようにインデックスできますか?
keanu
2016.sucked
foo.bar.baz
the.cake.is.a.lie
私は左からトークンの任意の集合によって行を検索する必要があります。 (もちろん、その最後の1は、全体のトークンである)
foo
foo.bar
foo.bar.baz
:だから、私はを開始すべてのトークンを検索したい場合があります。
私はSQLでこれを行う方法を知っている唯一の方法は、LIKE
演算子である:
SELECT * FROM [table] WHERE key LIKE 'foo.%'
、これはどのように悪いのですか? LIKE
はパフォーマンスの問題で評判が高いですが、私は常に文字列の左端から検索していますので、右端を無期限にしておきます - それは役に立ちますか?
| key | base1 | base2 | base3 |
|-------------|-------|----------|-------------|
| foo.bar.baz | foo. | foo.bar. | foo.bar.baz |
もちろん、私はひどいですbaseX
、のためにN個の列を持っている必要があるだろうが、それは速いだろうは間違いありません。
単純なVARCHAR
フィールドを使用すると仮定して、ここに100万行のデータが入ると、このフィールドにインデックスを作成して許容範囲にする方法はありますか?
ノンクラスタードインデックスを作成するだけで、右側に '%'がある限り、順序スキャンが実行されます。 n個の列を作成するという考え方は、多くのレベルで悪いので、今すぐ忘れてください。 – dean
'key like 'foo。%' 'を使うと' key' *のインデックスを利用できます。これは、SARGableではなくなるような主要なワイルドカードがある場合にのみです – alroc
** 2016.sucked ** lol;) –