0
스키마 :SQLite는 더 나은 인덱스 사용을 거부합니까?
CREATE TABLE [Groups] ([Group] VARCHAR(50) NULL, [ArtNum] INTEGER NULL, [ID] VARCHAR(50) NULL, [Time] INTEGER);
CREATE INDEX [GroupTime] ON [Groups] ([Group], [Time] DESC);
CREATE INDEX [GroupArtNum] ON [Groups] ([Group], [ArtNum]);
나는 다음과 같은 쿼리를 최적화하고자는 :
SELECT `ID` FROM `Groups` WHERE `Group`=? ORDER BY `Time` DESC LIMIT 1
문제 SQLite는이 GroupTime
인덱스 대신 GroupArtNum
인덱스를 사용하여 주장이다. 다음 EXPLAIN QUERY PLAN
인쇄 :
SEARCH TABLE Groups USING INDEX GroupArtNum (Group=?) (~10 rows)
USE TEMP B-TREE FOR ORDER BY
흥미로운 것은 내가 ArtNum
대신 Time
기준으로 정렬하려고하면, 그것은 매우 빠르게 실행하는 것입니다.
ArtNum
과 동일하게 Time
열에는 (64 비트) 정수만 있습니다.
['ANALYZE'] (http://www.sqlite.org/lang_analyze.html)을 실행 해 보셨습니까? –
'ANALYZE'가 이것을 고치지 않는다면'Time'을 질의 *에 넣으면이를 속여 야합니다. 이런 식으로 :'Where Group =? AND Time> = 0'입니다. 그러나보다 우아한 해결책이있을 수 있습니다. –
ANALYZE가 작동했습니다. 감사합니다. 내가 그것을 받아 들일 수 있도록 답변으로 다시 게시하십시오 :) –