この質問は私の古い質問に関連しています。以下のクエリの実行には10〜15秒かかりました。
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0)
一部の記事では、インデックスを使用CAST
してCHARINDEX
もメリットが得られないことがわかりました。またLIKE '%abc%'
、インデックスを使用してもメリットはありませんが、インデックスを使用してもメリットがないという記事もありますLIKE 'abc%'
。
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -like-queries http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
私の場合、クエリを次のように書き換えることができます。
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
このクエリは、前のクエリと同じ出力を提供します。columnの非クラスター化インデックスを作成しましたPhone no
。このクエリを実行すると、わずか1秒で実行されます。これは、以前の14秒と比較して大きな変化です。
どのようにLIKE '%123456789%'
インデックスからの利点は?
リストされた記事にパフォーマンスが改善されないと記載されているのはなぜですか?
使用するクエリを書き直そうとしましたCHARINDEX
が、パフォーマンスはまだ遅いです。クエリのCHARINDEX
ように表示されるのに、なぜインデックス付けのメリットがないのLIKE
ですか?
を使用したクエリCHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
実行計画:
を使用したクエリLIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
実行計画: