以下の表があります。
create table Order_Details
(
ID int not null primary key
,Order_ID int
,Order_Description nvarchar(40)
)
上記の表に27,500,000行を挿入しました。クエリの下で実行すると、6〜7秒かかります。
select ID,Order_ID, Order_Description
from Order_Details
where Order_Description like '%Football Size%'
ID
とOrder_Description
を含むOrder_ID
に非クラスター化インデックスを適用しました。
クエリを最適化して結果をより速く取得する他の方法はありますか?
構造を変更せずにクエリを最適化する方法はありません。このようなLIKE
フィルターは、常にインデックスまたはテーブルスキャンになります。
Order_Description
ただし、それはごくわずかな違いです。
注文の詳細に適切なスキーマを設計して、単一の文字列フィールドに格納するのではなく、ラインアイテムのプロパティで効率的に検索できるようにする方がはるかに良いでしょう。あなたが質問にあなたがその列で見つけると期待する種類のデータを追加すると、私たちはそこでより詳細にあなたを助けることができるかもしれません。
調査するもう1つのオプションは、ほとんどのSQL Serverエディションで利用できるフルテキストですが、ここでは最適な解決策ではないと思います。
問題は、その二重ワイルドカード'%string searches%'
are SQL Serverでは遅い 特殊な trigrams がないため、ネイティブで検索します。
文字列検索列の先頭にインデックスがある場合でも、すべての行を読み取る必要があります。
CREATE NONCLUSTERED INDEX ix_displayname ON dbo.Users(DisplayName)
SELECT u.Id, u.Reputation, u.DisplayName
FROM dbo.Users AS u
WHERE u.DisplayName LIKE '%Christopher%'
1つの文字列のみを検索する場合(これは決して当てはまりません)、または既知の検索文字列のセットが限られている場合は、インデックス付きの計算列(複数可)が適しています。
ALTER TABLE dbo.Users ADD SearchString
AS CONVERT(BIT, CASE WHEN DisplayName LIKE '%Christopher%' THEN 1 ELSE 0 END)
CREATE INDEX ix_yourmom ON dbo.Users (SearchString)
それ以外の場合は、IDで検索できる順序で各項目を追跡するOrderLines
テーブルのように、テキストの検索を含まないデータを見つけるためのより良い方法を考え出す必要があります。
SQL Serverの経験はありませんが、 [〜#〜] solr [〜#〜] をDBの横に配置して、テキスト検索を処理し、order_idとorder_details.idを返します。これは、DBでの以降のクエリに使用できます。
SQL Serverには 全文検索 が付属しています。コンテンツの途中で定期的に文字列を検索する場合は、全文検索機能を使用してください。
全文検索では、シソーラス用語を追加して、別の名前/用語で用語を検索することもできます。
設定するのは少し手間がかかりますが、いったん完了すると、基になるテーブルにレコードを挿入すると、必要な項目がフルテキストインデックスに自動的に追加されます。フルテキストの更新はリアルタイムではありませんが、外部の検索エンジンにデータを入力するためにデータをエクスポートする必要がある場合よりもかなり高速です。
全文検索を使用して検索を最適化するためのヒントとコツがあります。製品の説明をカテゴリ内で検索したいとします。製品リストが膨大な場合、ProdCat:Footwearなどの明示的な文字列を組み立てるVARCHARフィールドがあると、価値があるかもしれません。これにより、全文検索で、フリーテキスト検索だけでなく、すべての検索条件を満たすことができます。
フルテキストインデックスのバックアップ方法など、追加のDB管理のニーズがありますが、とにかく外部製品で同様の手法を学ぶ必要があります。
あなたの例( "%Football Size%")で単語全体を検索していると仮定します(つまり、「WomensFootball Size」またはその類の何かを含むテキストではなく、「Womens Football Size」を検索します)。 Full Text Index のように聞こえますが、一見の価値があります。