> 데이터 베이스 > MySQL 튜토리얼 > 날짜 표현식이 포함된 SQL Server 2008 쿼리가 왜 그렇게 느린가요?

날짜 표현식이 포함된 SQL Server 2008 쿼리가 왜 그렇게 느린가요?

DDD
풀어 주다: 2024-12-28 08:44:13
원래의
661명이 탐색했습니다.

Why Are My SQL Server 2008 Queries with Date Expressions So Slow?

쿼리 최적화: 날짜 표현식으로 느린 쿼리 성능 해결

SQL Server 2008을 사용할 때는 날짜 표현식의 영향을 이해하는 것이 중요합니다. 쿼리 성능에 대해 다음 쿼리를 고려하십시오.

Where FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) as DATE)
로그인 후 복사

이 쿼리는 문자열 리터럴을 사용하는 간단한 버전과 비교할 때 매우 느리게 실행됩니다.

Where FK.DT = '2013-05-01'
로그인 후 복사

성능 문제의 원인

성능 저하의 원인은 SQL Server의 카디널리티 추정기 버그로 인해 발생합니다. 이 버그는 복잡한 날짜 표현식을 사용할 때 추정의 정확성에 영향을 미칩니다. 이 경우 표현식은 이번 달의 시작('1786-06-01')으로 평가되어 일치하는 행 수를 잘못 추정합니다.

해결책

성능 문제를 해결하려면 대신 다음 표현식을 사용하는 것이 좋습니다.

Where FK.DT = cast(getdate() + 1 - datepart(day, getdate()) as date)
로그인 후 복사

이 표현식은 다음을 계산합니다. 당월 1일에 더 정확한 카디널리티 추정을 제공하고 쿼리 성능을 크게 향상시킵니다.

또한 추적 플래그 4199를 활성화하면 버그를 해결하고 복잡한 날짜 표현식에 대해 더 정확한 카디널리티 추정을 제공할 수 있습니다. 그러나 이는 올바른 카디널리티 추정에 의존하는 다른 쿼리에 영향을 미칠 수 있다는 점에 유의하는 것이 중요합니다.

모범 사례

최적의 쿼리 성능을 위해서는 더 간단한 사용을 고려하세요. 가능하면 날짜 표현식을 사용하거나 문자열 리터럴을 사용하세요. 날짜 표현식이 복잡하면 카디널리티가 잘못 추정되어 쿼리 최적화에 영향을 줄 수 있다는 점에 유의하세요.

위 내용은 날짜 표현식이 포함된 SQL Server 2008 쿼리가 왜 그렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿