머리말
오늘 웹사이트 중단 문제가 발생했습니다. 이를 해결하는 데 몇 분이 걸렸는데, 예약된 스크립트에서 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,1006. 변환된 쿼리 문
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 비디오 튜토리얼"