SQL Server에서 지난달 레코드를 검색하는 방법
특정 기간의 레코드를 얻으려면 범위 쿼리를 활용하는 것이 일반적인 방법입니다. 하한 및 상한이 포함됩니다. 그러나 이 접근 방식에는 인덱스 활용도가 저하되고 의도하지 않은 데이터가 선택될 수 있다는 두 가지 문제가 있습니다.
1. 인덱스 활용도:
캐스팅과 같은 암시적 함수를 포함하여 검색된 열에 함수를 적용하면 최적화 프로그램이 해당 열의 인덱스를 무시하게 되어 모든 레코드에 대한 선형 검색이 수행될 수 있습니다. 일반적으로 시간순으로 저장되는 타임스탬프를 고려하세요. 이러한 타임스탬프에서 날짜 부분을 추출하려면 복잡한 계산이 필요하므로 쿼리 속도가 느려집니다.
2. 의도하지 않은 데이터:
<=와 같은 상한 범위를 포함하면 SQL Server 버전 및 열 데이터 유형에 따라 잘못된 데이터 선택이 발생할 수 있습니다. 다음 날 자정의 데이터 또는 당일 일부 기록이 잘못 포함되거나 제외될 수 있습니다.
올바른 접근 방식:
이러한 문제를 해결하려면 다음을 사용하세요. 다음 쿼리 구조:
WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth
이전 달과 이번 달의 시작을 확인하려면 다음을 사용합니다. 계산:
@startOfPreviousMonth = DATEADD(month, -1, @startOfCurrentMonth) @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)
이 접근 방식은 인덱스 활용과 정확한 데이터 선택을 보장합니다. 전체 스크립트는 다음과 같습니다.
DECLARE @startOfCurrentMonth DATETIME SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0) SELECT * FROM Member WHERE date_created >= DATEADD(month, -1, @startOfCurrentMonth) AND date_created < @startOfCurrentMonth단일 값에 대해 날짜 작업을 한 번만 수행하면 최적화 프로그램이 인덱스를 활용할 수 있으며 쿼리는 올바른 데이터를 반환합니다.
위 내용은 SQL Server에서 지난달 데이터를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!