T-SQL에서는 무엇이 더 빠릅니까?IN 또는 OR이 더 빠른 이유는 무엇입니까?
DELETE * FROM ... WHERE A IN (x,y,z)
또는 내 케이스 (X)으로
DELETE * FROM ... WHERE A = x OR A = y OR A = z
는, Y 및 Z는 저장 프로 시저를위한 입력 파라미터이다. 그리고 내 능력을 최대한 발휘하기 위해 DELETE 및 INSERT 문을 수행하려고합니다.
T-SQL에서는 무엇이 더 빠릅니까?IN 또는 OR이 더 빠른 이유는 무엇입니까?
DELETE * FROM ... WHERE A IN (x,y,z)
또는 내 케이스 (X)으로
DELETE * FROM ... WHERE A = x OR A = y OR A = z
는, Y 및 Z는 저장 프로 시저를위한 입력 파라미터이다. 그리고 내 능력을 최대한 발휘하기 위해 DELETE 및 INSERT 문을 수행하려고합니다.
"IN"은 일련의 "OR"로 변환됩니다 ... "IN"이 포함 된 쿼리의 실행 계획을 보면 확장 된 것을 볼 수 있습니다.
내 의견으로는 "IN"을 사용하는 것이 훨씬 깔끔하고, 특히 큰 쿼리에서는 훨씬 더 읽기 쉽습니다.
정확히 일치해야합니다. 대부분의 RDMBS transalte IN
~ ORs
. 당신이 소모 높은 시간으로 INs
에서 ORs
에 번역을 고려한다면 물론
는 ORs
와 문장 빠른 ;-)
업데이트입니다 : 나는 A
가 열임을 고려 중이 야.
A
이 계산 인 경우 IN
을 사용하고 N은 OR
을 사용하여 한 번 수행됩니다.
생각하지 마세요. 윤곽.
속도에 대한 질문을 할 때 직감, 본인 또는 타인의 의견에 의존하지 않기를 바랍니다. 대신, 어떤 종류의 프로파일 링/실행 시간 측정과 함께 두 옵션을 시도하십시오. 은 상황에 따라 더 빠 름을 찾습니다.
+1 직접 말씀 드리고 싶은 것을 백업 해 주셔서 감사합니다. :-) –
두 개의 저장 프로 시저 중 하나는 IN
을 사용하고 다른 하나는 OR
을 사용하여 테스트 서버에 씁니다. 10,000 (또는 1,000,000 또는 기타) 시간마다 각 절차를 실행하고 타이밍을 비교하십시오.
일반적으로 이것은 어떤 접근 방식이 더 빠른지에 대한 질문에 대한 좋은 대답을 얻는 "유일한"방법입니다. 간단한 타이밍 테스트 사례를 작성하고 여러 번 실행합니다.
SQL Server
에서 옵티마이 저는 이러한 쿼리에 대해 동일한 계획을 생성합니다.
가
이
에 관계없이 A는 계산 또는 열인지 여부의 계획을 살펴 내 경험에서 똑같은 계획을 생성한다은 2005 년에 OR 절에있는 변환 SQL 서버처럼 보이는 .
IN의 내용이 다른 SELECT 문의 결과 인 경우이를 조인으로 변환 할 수도 있습니다. –
SQL Server에서 절대 속도가 가장 빠른 것은 INNER JOIN과 함께 DELETE를 사용하는 것입니다. 3 가지 값을 사용하면 차이점을 알 수 없겠지만, 더 많은 값 (우리는 수천 가지를합니다)을 사용하면 차이점이 나타날 수 있습니다. 당신은 임시 테이블에 당신의 가치를 숨기고 그 위에 합류 할 수 있습니다.
예.
DELETE C
FROM Customer AS C INNER JOIN #ValuesToDelete AS D ON C.CustID = D.CustID
선택적 where 절을 추가 할 수도 있습니다.
Thnx, 실행 계획에서 CPU 시간이 정확히 동일하다는 것을 알았습니다. – Zyphrax
사실이 아닙니다. 안으로 ors의 serise로 번역되지 않습니다. 쿼리를 프로파일 링하고 실제로 결과를 확인하는 것이 가장 좋을 것입니다. 종종 EXISTS가 IN보다 빠릅니다. 그러나 OR *는 두 가지보다 빠릅니다. 그것은 색인에 의존하지만. –
@Frank, 우리는 하위 목록과 함께 IN이 아닌 값 목록이있는 IN에 대해 이야기하고 있습니다. –