2012-10-12 3 views
0

이벤트가 포함 된 sqlite3 데이터베이스가 있습니다. 각 이벤트는 일어나는 일에 대해 "켜짐"또는 "꺼짐"상태이며, 이벤트의 시간은 물론 이벤트가 포함 된 기타 데이터도 포함됩니다.sqlite3에서 "가장 최근의"이벤트를 많이 찾는 효율적인 방법

각 유형의 마지막 이벤트를 찾기 위해 쿼리하려고합니다. 지금까지 내가 가지고 올 한 쿼리입니다 :

SELECT * from event where name='event1on' or name='event1off' ORDER BY t DESC LIMIT 1 

이 작동,하지만 난의 최신 하나를 찾으려면 많은 이벤트를 할 때 속도가 느립니다. 나는 각각의 SELECT에 대해 데이터베이스의 전체 검사 (수 백만 행)를 만들어야하기 때문에 이것이 의심 스럽지만이 작업을보다 효율적으로 수행 할 수있는 방법은 찾기 힘들다. 당신이 SQLite는 3.7.11 이상이, 당신은 최대 값이 들어있는 레코드에서 다른 필드 선택 max를 사용할 수있는 경우

답변

1

는 :

SELECT *, max(t) FROM event GROUP BY name 

이 쿼리 속도를 높이를 온 하나의 인덱스를 만들어보십시오 namet 필드

+0

이벤트 (이름, t)에'CREATE INDEX eventNameTimeIndex '를 시도했지만 쿼리 시간에는 영향을 미치지 않았습니다. – Michael

+0

인덱스가 없으면 제안한 쿼리가 내 쿼리와 거의 동일한 시간이 걸리는 것처럼 보입니다. 나는 훨씬 더 콤팩트 한 것처럼 그것을 좋아한다. 그러나 색인을 사용하면 내 검색어가 제공 한 검색어보다 약 40 배 빠릅니다. – Michael

관련 문제