2012-05-08 2 views
3

세 개의 테이블 컬럼을 통해 쿼리에 대한 인덱스 : 그것은레일 - 내가 자주 사용하는 쿼리있어

SELECT `sites`.* FROM `sites` WHERE (mobile_visible = true AND (created_at > '12-04-30' OR updated_at > '12-04-30')) 

내가 인덱스 또는 인덱스를 추가하려면이 SQL을 생성

Site.where("mobile_visible = true AND (created_at > :date OR updated_at > :date)", :date => "12-04-30") 

이 쿼리를보다 효율적으로 만들 수 있습니다. 3 개의 열에 대해 3 개의 인덱스를 개별적으로 추가해야합니까? 아니면 1 개의 인덱스로 3 개의 열 모두를 개별적으로 인덱싱해야합니까?

답변

2

가장 좋은 방법은 where 요소 인 where의 모든 요소를 ​​히트하는 인덱스를 만드는 것입니다.

데이터베이스는 일반적으로 쿼리의 특정 부분에 대해 한 번에 둘 이상의 인덱스를 사용할 수 없습니다. 세 개의 인덱스를 추가하면 데이터베이스는 어느 인덱스가 가장 큰 이익을 얻는지를 결정하려고 시도 할 것이고 인덱스를 선택하게됩니다. 쿼리 실행 계획을 결정하는 방법에 따라 최적의 쿼리를 선택하거나 선택하지 않을 수도 있습니다. 이 상황에 대한

, 나는 인덱스를 추가하는 것이 좋습니다 것 :

add_index :sites, [:mobile_visible, :created_at, :updated_at] 
+0

감사합니다 - 나는 대답을 편집했습니다. –

+0

이렇게하는 이유에 대한 설명에 감사드립니다. – Edward

관련 문제