2010-07-06 2 views
3

SQL Server가 WHERE 절의 대소 문자와 일치하지 않더라도 WHERE 절의 UPPER/LOWER는 여전히 비싼 것처럼 보입니다. WHERE 절에서 UPPER/LOWER를 무시하도록 SQL Server에 지시 할 수 있습니까?SQL Server를 중지 WHERE 절에서 쓸모없는 UPPER/LOWER를 평가 하시겠습니까?

이것은 무의미한 질문처럼 보일 수 있지만 Oracle과 SQL Server에 대한 단일 쿼리를 작성하는 것은 매우 좋습니다. 경우에 당신이 한 부씩 인쇄 키워드없이 작업 할 경우에, 당신이 뭔가에 열의 데이터 정렬을 설정할 수

WHERE YourColumn = @YourValue collate Latin1_General_BIN 

인 :

감사, 제이미

+1

SQL Server는 대/소문자 구분 데이터 정렬을 사용하도록 설정할 수 있습니다. 하지만 UP/LOWER가 비싸고 여기에 놓친 최적화가 있다는 사실에 놀랐습니다. – Rup

+0

SQL Server 데이터베이스 데이터 정렬을 대/소문자를 구분하지 않도록 설정합니다. 그게 영예 라는게 무슨 뜻이야? – Baaju

+0

'의무를 이행'에서와 같이 '우등'. WHERE UPPER (column) = @ param'과 WHERE column = @ 즉, WHERE UPPER (column) = 'MYSTRING'= 결과가 대소 문자를 구별하지 않는다고해도 UPPER ('MyString') = 'MYSTRING' param '은 데이터베이스에서는 동일하지만 첫 번째 매개 변수는 느리게 실행됩니다. – Rup

답변

4

질문에 대한 간단한 대답은 없습니다. WHERE 절에서 SQL Server가 마술처럼 함수 호출을 무시할 수 없습니다.

SQL Server에서 WHERE 절의 함수를 사용하면 인덱스 사용을 방지하고 테이블 검색을 강제 수행하기 때문에 성능 문제가 발생했습니다.

최상의 성능을 얻으려면 각 RDBMS 플랫폼 (애플리케이션 또는 저장 프로 시저 또는 뷰와 같은 데이터베이스 객체)에 하나씩 두 개의 쿼리를 유지해야합니다. 오라클과 SQL Server의 기능 영역이 매우 다른 점을 감안할 때, 어쨌든 다른 일을하게 될 것입니다.

0

그래서 당신은 같은 것을 의미 무신경.

YourColumn의 인덱스는 특정 데이터 정렬을 사용하므로 테이블 자체가 아니라 WHERE 절에 데이터 정렬을 지정하면 인덱스가 유용하지 않게됩니다. 나는 수년 전에 내가 스웨덴에 날아 갔을 때지도에서 베스 테라스를 발견 할 수 없었다고 생각한다. 왜냐하면 내가 생각한 편지는 a 이었기 때문에 사실 액센트가 있었고 알파벳 끝에 있었다. 잘못된 대조를 사용하려고 할 때지도 뒤의 색인이 좋지 않았습니다.

관련 문제