'='와 같은 와일드 카드가없는 SQL?
문제
나는 이것이 꽤 기본적인 질문이라는 것을 알고 있습니다. 생각한다 답을 알고 있습니다 ...하지만 확인하고 싶습니다.
이 쿼리는 진정으로 동일합니까?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
아마도 와일드 카드없이 사용하는 데있어 성능 오버 헤드가 있을까요?
선택적으로 Like & Wild Cards를 사용하는 앱이 있습니다. SP는 현재 와일드 카드를 사용하고 와일드 카드를 추가합니다. 저는 쿼리를 업데이트하여 사용하도록 업데이트 할 생각이지만 앱이 필요에 따라 와일드 카드를 추가하도록합니다.
해결책
@ocdecio가 말했듯이, 최적화가 똑똑하다면 차이가 없지만, 무대 뒤에서 무슨 일이 일어나고 있는지 확인하려면 두 쿼리의 실행 계획을 비교해야합니다.
다른 팁
Matt Whitfield의 원래 답변 여기
차이가 있습니다 ~ 사이 =
그리고 LIKE
. 사용하여 문자열 비교를 수행 할 때 LIKE
, 패턴 문자열의 모든 문자는 중요합니다. 여기에는 선행 또는 후행 공간이 포함됩니다.
따라서 열이 있다면 char
또는 nchar
그리고 아닙니다 nvarchar
또는 varchar
, 후행 공간으로 인해 다른 결과가 있습니다.
이 행동을 재현하는 작은 예 :
CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello ')
SELECT * FROM #temp WHERE [nam] = 'hello '
SELECT * FROM #temp WHERE [nam] LIKE 'hello '
좋은 옵티마이저는 첫 번째 표현을 두 번째 표현으로 줄입니다.
제휴하지 않습니다 StackOverflow