일대다 관계로 MYSQL 쿼리 성능 향상
P粉993712159
P粉993712159 2024-03-28 23:17:19
0
1
468

내 데이터베이스에 결과를 반환하는 데 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粉993712159
P粉993712159

모든 응답(1)
P粉226667290

다음 인덱스를 생성하여 테스트에서 더 유리한 EXPLAIN 보고서를 얻을 수 있었습니다.

으아아아

기본 키의 접두어이기 때문에 idx_parent도 제거했습니다.

id 유형 선택 테이블 파티션 유형 가능한 키 key_len 참고 알았어 필터링됨 추가
1 간단 문서 비어있음 참고 idx_client idx_client 110 상시 1 100.00 임시사용
1 간단 학과 비어있음 참고 main,division_id 부서 ID 38 상시 1 100.00 사용 위치 고유성
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿