데이터베이스에 테이블이 있고이 테이블에 세 열 (PropertyId
, ConceptId
및 Sequence
)의 인덱스가 있습니다. 이 특정 테이블에는 약 90,000 개의 행이 있으며이 세 가지 속성에 대해 색인이 생성됩니다. (페이지 매김 집계 쿼리가 전체 테이블을 가져 오는 것보다 시간이 덜 걸리는 이유
SELECT *
FROM MSC_NPV
ORDER BY PropertyId, ConceptId, Sequence
OFFSET x * 10000 ROWS
FETCH NEXT 10000 ROWS ONLY
총 시간 : 내가 지금과 같은 쿼리를 페이지를 매기는 경우에, 그러나
SELECT *
FROM MSC_NPV
ORDER BY PropertyId, ConceptId, Sequence
:
이제나는이 쿼리를 실행할 때, 필요한 총 시간은 2보다 큰 분 x는 0에서 8로 간다) 요구되는 시간은 약 20 초에 불과하다.
단순한 쿼리를 넘어서는 추가 작업이 페이지 매김을 필요로하고이 쿼리를 전혀 병렬 처리하지 않았기 때문에 순차적 네트워크 호출에 필요한 추가 대기 시간을 추가하기 때문에 직관적이지 않습니다. 그리고 이러한 쿼리를 하나씩 실행하면 대기 시간에 큰 영향을 미치지 않기 때문에 캐싱 문제가 아니라는 것을 알고 있습니다.
내 질문은 이것입니다. 왜 다른 것보다 훨씬 빠른 이유는 무엇입니까?
귀하의 질문에 전혀 대답하지 않았습니다. 귀하가 제공 한 것에 따르면 대기 시간은 제가 x 이상으로 집계 될 때 꾸준히 증가해야합니다 (즉, 'x = 1'은 'x = 2'보다 시간이 덜 소요되는 등등)하지만 그렇게되지는 않습니다. 각 쿼리에 대해 일정한 대기 시간이 발생하고 모든 쿼리를 실행하는 총 시간 (20 초)은 하나의 쿼리 (> 2 분)에서 동일한 데이터를 가져 오는 데 필요한 시간보다 훨씬 적습니다. 그 점은 전혀. – Woody1193
이것은 당신의 질문이 아닙니다. "이것은 페이지 매김이 단순한 질의 이상으로 추가적인 연산을 필요로하기 때문에 나에게 어긋납니다." – TheGameiswar
아니요, 그것은 데이터베이스의 모든 페이지를 가져 오는 데 필요한 시간이 얻을 시간보다 훨씬 짧다는 관찰이었습니다 전체 데이터베이스가 이상하게 보였습니다. – Woody1193