何十回もテーブルに参加していますが、毎回、列の 1 つの SUBSTRING の結果に基づいて結合 (またはフィルター処理) しています (文字列ですが、左側にゼロが埋め込まれています。最後の 4 桁は気にしないでください)。その結果、この列にインデックスが付けられ、クエリでインデックスが使用される場合でも、SUBSTRING 自体にインデックスが付けられていないためテーブル スキャンが実行されるため、SQL Server は結合する前にすべての行に対してそれを計算する必要があります。
このプロセスをスピードアップする方法についてのアイデアを探しています。現在、テーブルにビューがあり (テーブルにわかりやすい名前を付けるためだけに「SELECT * FROM」です)、計算されたビューに列を追加し、それをインデックス付けすることを検討しています。ただし、他の提案も受け付けています-何か考えはありますか?
詳細: 最初にこれを共有する必要がありました。テーブルは課金システムからレプリケーションを受信するため、基になるテーブルを編集して計算列を追加することはできません。計算列は、テーブルのビューに追加する必要があります。また、先行ゼロは常に先行ゼロであるとは限りません。それらは、私が興味のない他のデータである場合もあります。本当の問題は、「VARCHAR 列の途中にあるデータに結合しながら、それを利用するにはどうすればよいか」だと思います索引の? 全文検索?」
私の例を明確に するために単純化していますが、基本的には、次の値を持つ列の値を検索しようとしているとしましょう:
00000012345MoreStuff
00000012345Whatever
19834212345
Houses12345837443GGD
00000023456MoreStuff
SUBSTRING(7,5)="12345" の行に興味があるので、行 1 ~ 4 が必要ですが、行 5 は必要ありません。私が提案しているのは、「SELECT *」ビューに列を追加することです。この部分文字列が含まれており、それに基づいてインデックスが作成されます。それはもっと理にかなっていますか?