주문

2011-11-30 7 views
8

가정하자 나는이 두 가지 조건을 가진 MySQL의 쿼리주문

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

첫 번째 조건은 분명히 두 번째보다 훨씬 저렴 될 것입니다, 그래서 있는지 확인하고 싶습니다 먼저 실행되어 LIKE 절과 비교 될 행 풀을 제한합니다. MySQL 쿼리 조건은 나열된 순서대로 실행됩니까? 그렇지 않은 경우 순서를 지정하는 방법이 있습니까?

답변

6

MySQL에는 대부분의 경우 이러한 일을 처리하는 내부 쿼리 최적화 프로그램이 있습니다. 따라서 일반적으로 걱정할 필요가 없습니다.

물론 쿼리 최적화 프로그램은 절대 안전한 것은 아닙니다. 그래서 ...

당신에게 미안하지만 쿼리가 덜 효율적으로 실행되고 있다고 의심되는 경우 EXPLAIN에 익숙해지고 싶을 것입니다.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

그냥 가능성 궁리, 특정 쿼리를 진단하지 예상대로 "왼쪽에서 오른쪽으로"(a+b)*c 같은 특정 표현에 적용 않습니다. EXPLAIN 팁을 보내 주셔서 감사합니다. – wyatt

6

옵티마이는 적합한 순서대로 WHERE 조건을 평가합니다.

SQL은 declarative입니다 : 당신이이 그것을 수행하는 방법하지 무엇 원하는 최적화를 말한다.

procedural/imperative 언어 (.net, Java, PHP 등)에서 은 (는) 어떻게이라고 말하여 먼저 평가할 조건을 선택하겠습니까?

참고 :

+1

정확히, MySQL의 조건 실행 순서를 '또는 조건'으로 절차 적 언어로 사용할 수 없으며'if (a == 1 || b == 3) ..'를 사용할 수 있습니다.'a === 1 ','b == 3'은 절대로 실행되지 않습니다. –