낮은 수준의 큐로 설계된 테이블에서 처음 N 개의 행을 가져 오는 SQL 쿼리가 있습니다.where 절의 열을 사용하여 쿼리 최적화
- 먼저이 질문에 내 구현은 SQL 서버, 오라클, DB2 및 사이베이스를 지원하므로, 데이터베이스 불가지론 될 것입니다, 다음과 같이
select top N * from my_table where status = 0 order by date asc
이 쿼리 뒤에 의도이다. 위의 "상위 N"구문은 예제 일뿐입니다.
- 표에는 수백만 개의 행이 포함될 수 있습니다. 예를 들면, N은 비교적 작은 수이다. 100.
- 행이 대기열에 있으면 상태는 0입니다. 나중에 처리 중임을 나타 내기 위해 1로 변경됩니다. 처리 후 삭제됩니다. 따라서 테이블의 행 중 90 % 이상이 상태 0을 가질 것으로 예상됩니다.
- 테이블의 행은 날짜에 따라 반입되어야하므로
order by
절입니다.
이 쿼리를 가장 빠르게 만드는 데 가장 적합한 인덱스는 무엇입니까?
처음에는 색인이 (date, status)
이어야한다고 생각했지만 더 이상 확신 할 수 없습니다. 상태 열은 주로 0을 포함하므로 부가 가치가 있습니까? (date)
만으로도 색인을 생성하는 것으로 충분합니까?
또는 (status, date)
일까요?
행의 90 %는 상태 = 0입니다. 나는 리팩터링하는 것을 원하지 않습니다. 전체적인 요점은 테이블에서 레코드를 꺼내고 status = 1로 변경 한 다음 몇 가지 작업을 수행하는 것입니다. 처리가 끝나면 해당 레코드가 삭제됩니다. HA를 유지하기 위해 정기적으로 status = 1 인 레코드 (예 : 서버를 가져온 후 서버가 다운 됨)가 있는지 검사합니다. – Yoni
상태 필드별로 테이블을 파티셔닝 할 수 있습니다. 따라서 논리적으로 2 개의 파티션에 저장된 1 개의 테이블을 갖게됩니다. 내가 아는 한, 대부분의 RDMS는 파티셔닝을 지원합니다 ... – a1ex07