집 >데이터 베이스 >MySQL 튜토리얼 >MySQL WHERE 절의 조건 순서가 쿼리 성능에 영향을 줍니까?
MySQL WHERE 절의 조건 순서가 성능에 영향을 미치나요?
광범위한 WHERE 절과 수많은 조건이 포함된 MySQL 쿼리에서는 이것이 매우 중요합니다. 성능을 최적화합니다. 회사 식별자와 같은 특정 조건이 검색 공간을 수십만에서 수십으로 크게 줄인다고 가정해 보겠습니다. 이 조건을 절의 첫 번째 위치에 배치해야 합니까?
특정 매개변수와 일치하는 클라이언트를 검색하는 두 가지 버전의 쿼리를 고려해 보십시오.
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar)
성능에 미치는 영향
전통적으로 조건의 순서는 MySQL 성능에 최소한 또는 전혀 영향을 미치지 않는 것으로 여겨졌습니다. 그러나 최근 테스트와 통찰에 따르면 특정 시나리오에서는 실제로 차이가 발생할 수 있는 것으로 나타났습니다.
단락 회로 및 조건 순서
핵심 요소는 짧다는 것입니다. -순환. MySQL에서 AND 또는 OR로 연결된 복합 조건을 평가할 때 데이터베이스 엔진은 조건이 관련되는 경우에만 첫 번째 피연산자를 평가할 수 있습니다. 첫 번째 조건이 검색 공간을 크게 좁히면 이 최적화를 통해 상당한 시간을 절약할 수 있습니다.
데모
이 효과를 설명하려면 다음 쿼리를 고려하세요.
-- query #1 SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1; -- query #2 SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
OR 조건에서 피연산자의 순서만 다릅니다. myslowfunction은 각 호출을 기록하는 부작용을 포함하는 의도적으로 비용이 많이 드는 함수입니다.
이러한 쿼리가 실행될 때:
myslowfunction called for query #1 with value 1 myslowfunction called for query #1 with value 2 myslowfunction called for query #2 with value 1 myslowfunction called for query #2 with value 2 myslowfunction called for query #2 with value 3 myslowfunction called for query #2 with value 4
추적에서 볼 수 있듯이 쿼리에 대해 myslowfunction이 호출되는 횟수가 더 적습니다. #1 왜냐하면 첫 번째 조건(myint >= 3)이 이를 만족하지 않는 많은 행을 제거하기 때문입니다. 이 조건을 먼저 배치하면 조기 종료가 가능하고 느린 기능에 대한 불필요한 평가를 방지할 수 있습니다.
결론
따라서 질문에 대한 대답은 예, WHERE 절의 조건 순서는 단락으로 인해 때때로 MySQL 성능에 영향을 줄 수 있습니다. 제한적인 조건을 먼저 배치함으로써 데이터베이스 엔진은 불필요한 처리를 방지하고 효율성을 극대화하여 쿼리 실행을 최적화할 수 있습니다.
위 내용은 MySQL WHERE 절의 조건 순서가 쿼리 성능에 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!