2012-04-24 2 views
1

SQLite 쿼리를 수행 할 때 반환되는 데이터 집합의 크기가 쿼리 소요 시간에 영향을 줍니까? 이 질문에 대해 실제로 결과에있는 데이터에 액세스하지 않는다고 가정합니다. 쿼리 자체가 오래 걸리는지 알고 싶습니다. 또한 단순히 모든 행을 선택하고 WHERE 또는 ORDER BY 절이 없다고 가정합니다.큰 결과 집합을 반환하는 SQLite 쿼리에 시간이 더 걸립니까?

예를 들어 두 테이블 A와 B가있는 경우 테이블 A에 백만 개의 행이 있고 테이블 B에는 10 개의 행이 있고 두 테이블의 열 수와 유형이 같다고합시다. 테이블 A의 모든 행을 선택하는 것이 테이블 B의 모든 행을 선택하는 것보다 오래 걸립니까?

내 질문에 대한 답변은 How does a cursor refer to deleted rows?입니다. 쿼리 SQLite 동안 데이터의 복사본을 다음 큰 데이터 집합을 반환하는 쿼리를 경우에만 쿼리 결과 데이터를 복사하는 최적화 않는 한 더 오래 걸릴 수 있습니다 추측하고 있습니다. DB에있는 데이터 변경 검색어가 아직 살아 있습니까?

답변

0

일부 세부 사항에 따라 예를 들어, 쿼리 시간이 걸릴 수 있습니다.

예 : 일부 20k 항목이있는 표가 있습니다. 나는 모든 라인을 시도해야만하는 GLOB 검색을 LIMIT와 함께한다. LIMIT가 충족되면 쿼리가 일찍 중단 될 수 있습니다. 그렇지 않은 경우 전체 테이블 (또는 JOIN)을 통과해야합니다. 따라서 너무 많은 결과를 가진 검색은 몇 가지 결과만으로 검색하는 것보다 빠릅니다.

같은 양의 데이터를 통해 쿼리를 실행해야하는 경우 선택한 행 수가 더 적거나 많지 않을 것으로 예상됩니다. 물론 IO 비용이있을 것입니다.

+0

나는 나의 질문을 명확히했다, 나는 단일 테이블에서 모든 행을 선택하는 상황에만 관심이있다. WHERE, ORDER BY, LIMIT 또는 JOIN 절이 없다. – satur9nine

+0

확인. 나는 대답이 똑같을 것이라고 말한다. 표 A에서 더 많은 행을 실행하는 데 더 오래 걸립니다. 색인은 그 단계를 사라지게 할 수도 있습니다. 모두 선택하면 IO (허용되는 오버 헤드)만큼 빨리 행이 나올 것으로 예상됩니다. 동일한 비율로 더 많은 데이터가 더 오래 걸릴 것입니다. – XTL

관련 문제