SQLステートメント内の文字列を比較するためにLIKEまたは '='を使用する必要がある場合は、(ほとんど宗教的な)議論があります。
パフォーマンスの違いを確認するには、これを試してください。
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name
文字列と '='を比較するほうがはるかに高速です。
LIKE
と等号演算子は目的が異なりますが、同じことはしません。=
ははるかに高速ですが、LIKE
はワイルドカードを解釈できます。可能であれば=
を、必要なところでLIKE
を使用してください。
SELECT * FROM user WHERE login LIKE 'Test%';
サンプルの一致:
TestUser1
TestUser2
TestU
テスト
私の小さな経験では:
完全一致の場合は "="。
部分一致の「LIKE」.
Postgresが文字列マッチングのために提供しているトリックは他にもいくつかあります(それがあなたのDBである場合)
ILIKE、大文字と小文字を区別しないLIKEの一致:
select * from people where name ilike 'JOHN'
一致します。
あなたが本当に怒りたいのなら、正規表現を使うことができます。
select * from people where name ~ 'John.*'
一致します。
頭が上になるのと同じように、 '='演算子はTransact-SQLでは文字列をスペースで埋めます。そのため'abc' = 'abc '
はtrueを返します。 'abc' LIKE 'abc '
はfalseを返します。ほとんどの場合、 '='が正しいでしょうが、最近の私の場合は違いました。
そのため、 '='のほうが速いのですが、LIKEはあなたの意図をより明確に述べているかもしれません。
パターンマッチングにはLIKEを使用してください。完全一致=の場合.
パフォーマンスが遅くても "like"を使用するもう1つの理由があります。文字値は比較時に暗黙的に整数に変換されるため、
@transid varchar(15)を宣言する
@transid!= 0の場合
「varchar値の変換 '123456789012345'がint列をオーバーフローしました」というエラーが表示されます。
シェルでは、ワイルドカードのchar [*、?]のようにLIKEが一致します。
LIKE '%suffix' - サフィックスで終わるすべてのものを教えてください。あなたはそれができませんでした=
実際に事件によります。