2016-08-22 63 views
0

내가 아는 주문한 내가 좋아하는 두 개의 쿼리가있는 경우 있음 :PostgreSQL을 인덱스 디자인 : 결합 인덱스는

SELECT * FROM fruits WHERE type='apple' 

SELECT * FROM fruits WHERE type='orange' AND state='rotten' 

을 다음 효과적인 인덱스는 다음과 같습니다

CREATE INDEX type_state_index_on_fruits ON fruits(type, state) USING btree; 

이후 첫 번째와 두 번째 쿼리 모두에 대해 인덱스를 사용할 수 있습니다. 데이터베이스 후 정렬을 할 필요가 없습니다 것이다 그래야

SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC 

내가 효과적으로 종류와 상태의 정렬 된 인덱스를 만들 수 있지만 picket_at으로 정렬 수 :

그러나 어떤이 들어가는이 정렬되어있는 경우 발생 두 경우 모두 행을 가져 오는 :

SELECT * FROM fruits WHERE type='apple' ORDER BY picked_at ASC 
SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC 
+0

[실행 계획 확인] (https://www.postgresql.org/docs/current/static/sql-explain.html) –

답변

0

당신이 두 쿼리에 대한 하나의 인덱스를 원하는 경우에, 나는 (type, picked_at) 하나를 권 해드립니다.

색인에 state이 있어야하는 경우 두 개의 색인이 필요할 것입니다.