크기가 3GB 인 SQLite3 DB가 있는데이 쿼리를 사용하여 두 제품 사이의 특정 제품에 대한 최신 주문을 가져 오려고합니다.각 제품에 대한 최신 날짜 시간 검색
CREATE TABLE "ProductOrders" (
"ID" INTEGER NOT NULL UNIQUE,
"ProductID" INTEGER NOT NULL,
"AdditionalInfo" TEXT,
"OrderDateTime" DOUBLE NOT NULL,
PRIMARY KEY ("ProductID", "OrderDateTime")
)
내가 더 중복 테이블에 없는지 확인하기 위해 ProductID
및 OrderDateTime
에 인덱스를 생성 : 여기
나는 현재 다음과 같이이 어떻게 사용하고 쿼리 : 그것은을 위해 전체 테이블을 스캔 할 것으로 보인다 그러나
Select ProductID, AdditionalInfo, OrderDateTime
From ProductOrders a
Where a.OrderDateTime = (Select max(OrderDateTime)
From ProductOrders b
Where a.ProductID = b.ProductID
AND b.OrderDateTime < 40544.5
AND b.OrderDateTime > 40539.5
)
그 쿼리가 잘 작동하고 내가 원하는 것을 정확하게 수행의 'A' 쿼리의 일부. 내 흔적은 다음과 같습니다 :
0|0|0|SCAN TABLE ProductOrders AS a
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 1
1|0|0|SEARCH TABLE ProductOrders AS b USING COVERING INDEX sqlite_autoindex_ProductOrders_2 (ProductID=? AND OrderDateTime>? AND OrderDateTime<?)
실행하는 데는 적어도 2 분이 걸립니다. 구조에서 ProductID
이 기본 키 1로 표시되고 OrderDateTime
이 기본 키 2로 표시된다는 것을 알 수 있습니다. 이것이 이유 일 수 있습니까?
그리고이 특별한 경우 조인 조건이 인덱스와 일치합니다. –