'='またはLIKEを使用してSQLの文字列を比較しますか?


169

SQLステートメントの文字列を比較するためにLIKEまたは '='を使用する必要がある場合、(ほぼ宗教的な)議論があります。

  • LIKEを使用する理由はありますか?
  • 「=」を使用する理由はありますか?
  • パフォーマンス?読みやすさ?

回答:


126

パフォーマンスの違いを確認するには、次のことを試してください。

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

文字列と「=」を比較すると、はるかに高速です。


5
うーん...さて、私は要点をとった。約600エントリのテーブル、比較フィールドとして10桁の数値:等しいとは、20〜30倍速くなります!
グエルダ

194

LIKE等号演算子にはさまざまな目的がありますが、同じことはしません。ワイルドカードを解釈できるの
=に対し、はるかに高速LIKEです。=できるLIKE限り、必要な場所で使用します。

SELECT * FROM user WHERE login LIKE 'Test%';

サンプルの一致:

TestUser1
TestUser2
TestU
テスト



14

Postgresが文字列マッチングのために提供する他のいくつかのトリックがあります(それがたまたまDBである場合)。

ILIKE。大文字と小文字を区別しないLIKE一致です。

select * from people where name ilike 'JOHN'

一致:

  • ジョン
  • ジョン
  • ジョン

そして、本当に怒りたいなら、正規表現を使うことができます:

select * from people where name ~ 'John.*'

一致:

  • ジョン
  • ジョナソン
  • ジョニー

1
正規表現やlikeキーワードのパフォーマンスが「=」よりも悪いことを知っている限り
Ceilingfish

タイプミス「ilike」から「like」
Salah Alshaal

9

前と同じように、 '='演算子はTransact-SQLで文字列にスペースを埋め込みます。したがって、'abc' = 'abc 'trueを返します。'abc' LIKE 'abc 'falseを返します。ほとんどの場合 '='は正しいでしょうが、最近の私の場合はそうではありませんでした。

したがって、「=」の方が高速ですが、LIKEは意図をより明確に示す場合があります。

http://support.microsoft.com/kb/316626



6

LIKEパターンマッチングに=使用され、同等性テストCOLLATIONに使用されます(使用中によって定義されます)。

=インデックスを使用できますが、LIKEクエリでは通常、結果セットのすべてのレコードをテストしてそれを除外する必要があるため(フルテキスト検索を使用している場合を除く)、=パフォーマンスが向上します。


4

LIKEは、シェル
LIKE '%suffix'でワイルドカードchar [*、?]のようにマッチングを行います-suffixで終わるすべてのものを与えます。
実際には、= Dependsでそれを行うことはできません。


3

パフォーマンスが遅くても「like」を使用する別の理由があります。比較すると、文字値が暗黙的に整数に変換されるため、次のようになります。

@transid varchar(15)を宣言

if @transid!= 0

「varchar値の変換 '123456789012345'がint列をオーバーフローしました」エラーが発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.