>  기사  >  데이터 베이스  >  예제를 통해 mysql에서 or 및 in의 효율성 분석

예제를 통해 mysql에서 or 및 in의 효율성 분석

藏色散人
藏色散人앞으로
2021-09-25 17:12:492322검색

예제를 통해 mysql에서 or 및 in의 효율성 분석

mysql에서 or 및 in의 효율성

머리말

오늘 웹사이트 중단 문제가 발생했습니다. 이를 해결하는 데 몇 분이 걸렸는데, 예약된 스크립트에서 SQL을 찾았습니다. 매우 느립니다. DBA가 변경을 제안하여 효율성이 수백 배 향상되었습니다.

시나리오 설명

1. 두 테이블 연관 쿼리
2. table1의 데이터 양이 100만 개에 가깝습니다. table2의 데이터가 9백만 개에 가깝습니다
4. 쿼리 조건의 제목 필드가 색인화되지 않았습니다
5. 원본 쿼리 문

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title="衣服" or b.title="裤子" or b.title="帽子" limit 0,100
6. 변환된 쿼리 문

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title IN ("衣服","裤子","帽子") limit 0,100
변환 후 효율성

원본의 실행 시간 SQL은 5초, 변경 후 0.01초 밖에 걸리지 않습니다

이유

정보를 확인해 보니 데이터 양이 100만 개가 넘고 조건이 인덱싱되지 않은 경우 or의 쿼리 효율이 훨씬 낮습니다. in. or의 효율성은 O(n)인 반면, in의 효율성은 O(logn)입니다. n이 클수록 효율성 차이는 더욱 분명해집니다.

추천 학습: "

mysql 비디오 튜토리얼"

위 내용은 예제를 통해 mysql에서 or 및 in의 효율성 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제