>  기사  >  데이터 베이스  >  하위 쿼리가 포함된 MySQL \"IN\" 쿼리가 왜 이렇게 느린가요?

하위 쿼리가 포함된 MySQL \"IN\" 쿼리가 왜 이렇게 느린가요?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 16:48:30502검색

 Why are MySQL

MySQL "IN" 쿼리: 하위 쿼리 딜레마와 명시적 값 효율성

MySQL 쿼리에서 "IN" 연산자를 하위 쿼리로 인해 심각한 성능 병목 현상이 발생할 수 있습니다. 이는 약 700만 개의 행이 포함된 em_link_data 테이블의 쿼리에서 입증됩니다. 하위 쿼리가 포함된 "IN" 쿼리는 실행하는 데 무려 18초가 걸립니다.

반대로, 하위 쿼리를 명시적인 값으로 바꾸면 결과가 매우 좋아집니다. -빠른 실행, 1밀리초 이내에 완료됩니다. 이러한 뚜렷한 대조는 다음과 같은 질문을 제기합니다. "IN" 쿼리가 하위 쿼리에 비해 느린 이유는 무엇입니까?

범인은 하위 쿼리 처리에 있습니다. MySQL에서 하위 쿼리는 만날 때마다 평가됩니다. 즉, "IN" 쿼리의 하위 쿼리는 여러 번, 잠재적으로 수백만 번 실행됩니다. 이러한 비용이 많이 드는 프로세스는 성능을 심각하게 저하시킵니다.

반대로 명시적 값을 사용하면 데이터베이스는 시간이 많이 걸리는 하위 쿼리 평가를 우회하여 테이블의 관련 레코드에 직접 액세스할 수 있습니다. 이렇게 직접 액세스하면 실행 시간이 훨씬 빨라집니다.

성능 병목 현상을 완화하려면 다음 전략을 고려하세요.

  • 쿼리를 JOIN으로 다시 작성: 이 접근 방식을 사용하면 하위 쿼리가 필요하지 않으므로 보다 효율적인 단일 쿼리가 가능합니다.
  • 연결 열의 인덱스: "IN" 조건과 관련된 열에 인덱스가 생성되었는지 확인하세요. . 이 단계는 데이터베이스가 관련 레코드를 신속하게 식별하는 데 도움이 됩니다.
  • 데이터베이스 설정 최적화: 관련 MySQL 매개변수를 조정하여 쿼리 성능을 최적화합니다. 여기에는 innodb_buffer_pool_size 및 sort_buffer_size와 같은 설정이 포함될 수 있습니다.

이러한 조치는 성능을 향상시킬 수 있지만 가능하면 하위 쿼리에 "IN" 연산자를 사용하지 않는 것이 중요합니다. 하위 쿼리와 명시적 값 간의 효율성 차이를 인식하고 적절한 최적화 전략을 구현하면 MySQL "IN" 쿼리를 크게 가속화할 수 있습니다.

위 내용은 하위 쿼리가 포함된 MySQL \"IN\" 쿼리가 왜 이렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.