2017-03-23 8 views
0

약 15 개의 다른 열과 함께 수억 개의 레코드가있는 테이블이 있습니다. 데이터는 타임 스탬프, 추적되는 차량의 ID 및 속도 기록과 함께 속도 기록과 함께 사용됩니다. 단일 차량에는 수십만 개의 속도 기록이있을 수 있으며 약 40,000 대의 차량이 있습니다.SQLite max() 쿼리 최적화

각 단일 차량에 대해 최대 속도 기록을 찾고 싶습니다.

SELECT userid, max(speed) from SpeedReadings group by userid 

시간이 많이 걸립니다, 그래서 나는이를 최적화하려는 :

그냥 쿼리. 나의 첫 번째 개념은 사용자 ID와 속도로 색인을 만드는 것이다. 쿼리 및 인덱스 테이블의 변수 순서가 중요합니까?

SELECT userid, max(speed) from SpeedReadings group by userid 

SELECT distinct userid, max(speed) from SpeedReadings 

답변

1

그룹화를 최적화 할 수있는 가장 좋은 방법은 데이터베이스가되지 않도록 데이터, 사용자 ID에 의해 정렬됩니다 목록에 저장 한 것입니다 :

이 두 쿼리 간의 속도 차이가 있나요 가능한 모든 결과를 유지해야합니다. 즉, userid이 첫 번째 열인 색인이 필요합니다.

계산을 더 빠르게하려면 인덱스에 speed 열을 추가하여 covering index이되도록하십시오.

쿼리의 열 순서는 중요하지 않습니다.

쿼리와 속도 차이가 있습니다 SELECT distinct userid, max(speed) from SpeedReadings,하지만 당신은 올바른 결과를 얻으려면, 그래서 차이는 중요하지 않습니다 같아요.

+0

답장을 보내 주셔서 감사합니다. 나는 그룹이 올바른 결과를 나타내지 만 별개의 것을 선택하지는 않을 것으로 기대한다. – bjornasm

+0

그건 그렇고, 당신은 커버 인덱스를 언급 할 때, 당신은 모두 사용자 ID와 속도, 멀티 컬럼 인덱스를 의미합니까? – bjornasm

+0

예, 그 문장의 첫 번째 부분에서 썼습니다. –