프로파일 링을 통해 기대했던 것보다 약간의 시간이 걸리므로 몇 가지 사항을 수정하고 싶습니다. 이 쿼리의 목적은 주어진 device_id에 대한 메시지 테이블에서 마지막 3 시간의 데이터를 가져 와서 마지막 메시지 수신 (시간 내림차순)으로 결과를 정렬하는 것입니다. 현재 데이터베이스에 복합 인덱스가있어 실제로 이상적이지는 않습니다. 모든 u 리 또는 u 리 구문이이 u 리를 빠르게하기 위해 권장 사항을 변경합니까?성능 Oracle 쿼리 튜닝
메시지 테이블 구조 :
열 :
id (auto incremented PK NUMBER(10))
device_id
model_id
state
creation_date (DATE when row was inserted)
time (unix time message was transmitted)
//a bunch of other columns omitted
인덱스 :
id
device_id, model_id, state (composite index)
쿼리
select * from messages where device_id='0-12345678' and creation_date > sysdate-3/24 order by time desc
쿼리 계획이란 무엇입니까? 복합 색인은 무엇입니까? 그것은'device_id, creation_date'에 복합 인덱스입니까? 이 쿼리는 몇 행을 반환합니까? 얼마나 빨리 실행됩니까? 얼마나 빨리 실행해야합니까? –
'messages' 테이블에 몇 개의 행이 있습니까? 'device_id'는 얼마나 독특한가요? ('device_id','creation_date') 인덱스 화되지 않은 컬럼으로 데이터를 선택합니다. 쿼리가 느려지는 것은 당연한 일입니다. – npe
메시지 테이블에는 6,354,837 개의 행이 있습니다. Device_id는 테이블 내에서 고유하지 않은 여러 메시지를 연결할 수 있습니다. 나는 색인을 만들지 않았고 이것이 내가 묻는 이유입니다. 색인이 변경되어야한다고 생각합니다. – c12