2015-02-06 6 views
-2

a는 테이블 인덱스이고, b는 일반 열입니다.어떤 선택이 Sqlite에서 더 빠릅니까?

select a,b from (select a,b from table where a in (*listA*)) where b in (*listB*) 

또는

select a,b from table where (a=listA[0] and b=listB[0]) or (a=listA[1] and b=listB[1])... 

나는 목록 선언을 표현하기 위해 의사 코드를 사용하고 있습니다.

+2

이러한 쿼리는 다른 결과를 줄 수 있습니다. 올바른 결과를 얻고 싶습니까? –

+0

네, 제가 실수를 저질렀을지도 모른다고 생각합니다. 나는 그들에게 똑같은 결과를주기를 원했습니다. 나는 두 번째 하나를 선택하고 마지막에 기본적으로 첫 번째에 대한 두 번째의 동작을 모방하려고했지만 임시 테이블을 먼저 선택의 색인 비교를 사용하여 다음 임시 테이블에서 선택하여 만들려고 의미했다. 비 인덱스 열 비교 사용 – luis

답변

0

ab의 조합을 결코 보지 못하기 때문에 첫 번째 쿼리가 잘못되었습니다.

는 임시 테이블을 사용하려면, 당신은 그것으로 가입 할 수 있습니다

SELECT a, b 
FROM MyTable 
JOIN (SELECT 1 AS a, 2 AS b UNION ALL 
     SELECT 3,  4  UNION ALL 
     SELECT 5,  6 ...) 
USING (a, b) 
버전이 더 나은 최적화

너무 많은 요인에 따라 달라집니다; 알아내는 유일한 방법은 대표 데이터로 측정하는 것입니다.

관련 문제