안녕하세요?
Images 라는 테이블이 있습니다. (대략 600만 Row 정도 이고 하루 10만개 정도 증가)
컬럼은 아래와 같이 구성되어있습니다.
- Id(PK, bigint, not null) -> (Clustered)
- UpdatedTime(datetime, null) -> Non-Unique, Non-Clustered
- IndexedTime(datetime, null) -> Non-Unique, Non-Clustered
... 기타 생략
저는 UpdatedTime이 IndexedTime보다 큰 결과물의 아이디 값이 필요합니다.
SELECT TOP 320 Id FROM Images WHERE IndexedTime IS NULL OR (updatedTime > IndexedTime)
위와 같은 Query를 주기적으로 호출하여 사용하고 있는데 컬럼마다 비교하여, 인덱스를 타지 못해 성능이 느립니다.
이런 경우 해결 할 수 있는 좋은 방안이 있는지 궁금합니다.
감사합니다.
SELECT TOP 320 Id FROM Images
WHERE IndexedTime IS NULL
OR
(
(
updatedTime >= GetDate() - 1
or IndexedTime >= GetDate() - 1
)
And (updatedTime > IndexedTime)
And IndexedTime IS NOT NULL
)
이런식으로 ... updatedTime , IndexedTime 에 대해서 조건을 추가해서 검색을 할수는 없는지여.
만약 위 쿼리대로라면 updatedTime > IndexedTime 을 매번 전체를 비교할수 뿐이없으니 느려질꺼 같네여..