내 데이터베이스에 결과를 반환하는 데 25초가 걸리는 쿼리가 있는데, 이는 너무 깁니다. 꽤 간단해야 할 것 같습니다. 두 개의 테이블. 기본 테이블(문서)은 일부 데이터 열이 있는 표준 테이블이고, 연결 테이블은 두 개의 열(parent_id, Division_id)만 있는 매핑 테이블입니다. 이전에는 매핑 테이블에 인덱스가 없어서 인덱스를 추가하고 인덱스를 포함하도록 '해석'을 변경했지만 성능에는 영향이 없는 것으로 보입니다.
쿼리는 다음과 같습니다:
으아악설명 결과는 다음과 같습니다.
문서의 총 줄 수: 6720 매퍼의 총 행 수: 6173
모은 정보를 바탕으로 "유형"이나 "추가"를 개선하여 쿼리를 더 빠르게 만들어야 합니다. 여기서 무엇을 할 수 있나요?
테이블 문 만들기:
explain SELECT DISTINCT doc.* FROM document doc LEFT JOIN multi_division_mapper divisions ON doc.id = divisions.parent_id WHERE doc.clientId = 'SOME_GUID' AND (divisions.division_id IS NULL OR divisions.division_id IN ('SOME_GUID'));
P粉2266672902024-03-29 13:06:40
다음 인덱스를 생성하여 테스트에서 더 유리한 EXPLAIN 보고서를 얻을 수 있었습니다.
으아아아기본 키의 접두어이기 때문에 idx_parent
도 제거했습니다.
id | 유형 선택 | 테이블 | 파티션 | 유형 | 가능한 키 | 키 | key_len | 참고 | 알았어 | 필터링됨 | 추가 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 간단 | 문서 | 비어있음 | 참고 | idx_client | idx_client | 110 | 상시 | 1 | 100.00 | 임시사용 |
1 | 간단 | 학과 | 비어있음 | 참고 | main,division_id | 부서 ID | 38 | 상시 | 1 | 100.00 | 사용 위치 고유성 |