2009-08-20 3 views
1

메모리 데이터베이스에 DBD :: SQLite를 사용하고 있습니다. 테이블에 대해 다음 인덱스를 정의했습니다.SQLite3에서는이 select 문에 두 개의 인덱스가 도움이됩니까?

CREATE INDEX x ON ss (a, b); 
CREATE INDEX y ON ss (c, d, e, o); 

다음 select 문에서이 두 인덱스를 사용합니까?

SELECT f, g 
FROM ss 
WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ? 

그리고 where 절의 해당 열에 대해서만 인덱스를 작성해야합니까?


최소 INDEX로 SELECT를 실행하고 싶기 때문에이 질문을드립니다.

SELECT f, g FROM ss WHERE o = ? 
SELECT f, g FROM ss WHERE a = ? AND b = ? 
SELECT f, g FROM ss WHERE c = ? AND d = ? AND e = ? 
SELECT f, g FROM ss WHERE c = ? AND d = ? AND o = ? 
SELECT f, g FROM ss WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ? 

답변

2

EXPLAIN QUERY PLAN (http://sqlite.org/lang_explain.html)을 사용하면 어떤 색인이 사용되는지 확인할 수 있습니다. 내가 SQLite는 설명서를 기억만큼

"0","0","TABLE ss WITH INDEX ..." 
+0

죄송합니다. 링크가 유효하지 않습니다 (더 이상 표시되지 않음). – Juergen

+0

링크는 http://sqlite.org/lang_explain.html입니다. 이스케이프 마술에 의해 깨진 것 같습니다. – wierob

+0

예, 진짜 마법 ;-) 고마워요! – Juergen

0

잘못하지만 지금까지 각 선택하십시오 (하위) tablein을 위해 1 개 이상의 인덱스를 사용하는 경우에 나는 매우 놀랄 것입니다 SQLite는의 작은 풋 프린트 제공 할 수있다.

ORACLE 및 DB2와 같은 괴물 데이터베이스는 최근에 subselect 당 테이블 당 둘 이상의 색인을 사용하기 시작했으며 이후에는 드물게 사용하기 시작했습니다.

0

같은에서

EXPLAIN QUERY PLAN 
SELECT f, g 
FROM ss 
WHERE a = ? AND b = ? AND c = ? AND d = ? AND e = ? 

Reuslt은, SQLite는 항상 하나 인덱스를 사용합니다.

그래서 여기서 실패 할 의무가 있습니다. 그러나 관련된 모든 필드를 포함하는 하나의 인덱스를 만들 수 있습니다 (인덱스 크기에 대한 추가 메모리 소비가 발생하고 삽입 및 업데이트 속도가 느려질 수 있음).

수정 사항 : 최신 설명서에서 옵티마이 저가 optimizer docu을 참조하여 "적어도 하나 이상의 인덱스"를 사용하려고합니다. 이음새가 약간 업그레이드되었지만 여러 indizes를 사용할 때 여전히 명확하지 않습니다. 따라서 wierob에 의해 "EXPLAIN QUERY PLAN"을 statet으로 사용해야합니다.

관련 문제