SQL에서 문자열을 비교하려면 '='또는 LIKE를 사용 하시겠습니까?


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 배 빠릅니다!
guerda

194

LIKE평등 연산자는 다른 목적을 가지고 있으며, 같은 일을하지 않습니다 :
=훨씬 빠르지 만 LIKE와일드 카드를 해석 할 수 있습니다. =당신이 할 수있는 LIKE곳 과 필요한 곳 어디에서나 사용하십시오 .

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

일치하는 샘플 :

TestUser1
TestUser2
TestU
테스트



14

Postgres가 문자열 일치를 위해 제공하는 몇 가지 다른 트릭이 있습니다 (DB 인 경우).

대소 문자를 구분하지 않는 LIKE 일치 인 ILIKE :

select * from people where name ilike 'JOHN'

성냥:

  • 남자
  • 남자
  • 남자

그리고 정말로 화를 내고 싶다면 정규 표현식을 사용할 수 있습니다.

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

성냥:

  • 남자
  • 요나 톤
  • 남자

1
내가 정규식과 같은 키워드를 알고있는 한 '='보다 성능이 떨어집니다
Ceilingfish

오타 'ILIKE'에 '와 같은'
살라 Alshaal

9

'='연산자는 Transact-SQL에서 공백으로 문자열을 채 웁니다. 따라서 'abc' = 'abc 'true를 반환합니다. 'abc' LIKE 'abc '거짓을 반환합니다. 대부분의 경우 '='는 정확하지만 최근의 경우에는 그렇지 않습니다.

따라서 '='는 빠르지 만 LIKE는 의도를 더 명확하게 진술 할 수 있습니다.

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


7

패턴 일치의 경우 LIKE를 사용하십시오. 정확히 일치하려면 =.


6

LIKE패턴 매칭 =에 사용되며 동일 테스트 COLLATION에 사용됩니다 (사용중인 정의 ).

=LIKE쿼리는 일반적으로 전체 텍스트 검색을 사용하지 않는 한 결과 집합의 모든 단일 레코드를 필터링하여 필터링하여 =성능을 향상 시키는 동안 인덱스를 사용할 수 있습니다 .


4

LIKE는
'% suffix' 쉘에서 와일드 카드 문자 [* ,? ]와 일치 합니다. 접미사로 끝나는 모든 항목을 알려줍니다. =로
실제로 는 할 수 없습니다 .


3

성능이 느린 경우에도 "like"를 사용하는 또 다른 이유가 있습니다. 비교할 때 문자 값이 암시 적으로 정수로 변환되므로 다음과 같이하십시오.

@transid varchar (15) 선언

@transid! = 0 인 경우

"varchar 값 '123456789012345'의 변환이 int 열을 오버플로했습니다"오류가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.