2009-09-24 1 views
3

필드 이름과 테이블 이름 끝에 임의의 별칭을 추가하는 쿼리가 많이 있습니다 (변경하기 어려운 ORM 구현을 사용자 지정했기 때문에). 쿼리는 다음과 같다 (실질적으로 더 복잡하지만 대부분의 시간)MS SQL Server 최적화 프로그램 및 다양한 테이블 및 필드 별칭

SELECT fooA.field1 as field1B, 
     fooA.field2 as field1C 
FROM foo as fooA 

A, B 및 C가 임의로 생성 된 (그리고 더 이상의 문자)하는 접미사. 이로 인해 쿼리의 성능이 저하됩니까? 즉, 최적화 프로그램이 무작위 부분으로 인해 반복되는 쿼리를 인식하지 못하게됩니까? 우리는 주로 SQL Server 2005를 사용합니다.

답변

3

그렇습니다. 옵티마이 저는 쿼리 해시가 변경 될 때마다 쿼리를 재분석하고 다시 컴파일해야합니다.

+0

SQL Server 용입니까? –

+0

'Oracle'및 'MySQL'(쿼리 캐시 사용)에서도 가능합니다. 그러나 'SQL Server'는 해시를 계산하는 동안 상수와 리터럴을 제거하고 '오라클'은 축 어적으로 일치해야합니다. – Quassnoi

1

쿼리 최적화 엔진은 ObjectId가 실행하는 실행 계획을 사용합니다.이 별칭은 프로그래밍 용도로만 사용되지만 실행 중에는 사용되지 않습니다. 따라서 성능이 다른 별칭을 사용하거나 작거나 긴 별칭을 사용하여 영향을받을 것이라고 생각하지 않습니다.

Quassnoi는 쿼리의 재 해싱에 대해 좋은 지적을합니다. 쿼리 성능 자체는 영향을받지 않지만 전반적인 성능 환경에 영향을 미칩니다.

1

임시 쿼리 인 경우 각각은 별도의 쿼리로 컴파일되고 캐시됩니다. SQL에서 캐시 된 계획과 일치하는 쿼리의 경우 텍스트는 동일해야합니다 (대소 문자 및 공백까지)

테이블 별칭 만 다른 쿼리가 많은 경우 계획 재사용, 컴파일 및 대용량 계획 캐시가 매우 부족합니다.

캐시 된 계획과 일치하는 프로 시저 만 objectid로