sourcecode

MySQL 최적화: Different가 너무 느리다

copyscript 2022. 9. 6. 22:24
반응형

MySQL 최적화: Different가 너무 느리다

이 양식에 대한 질문이 있습니다.

SELECT COUNT(*)
FROM 
   table1, table2, table3, table4, table5, table6
where (several conditions to join the tables)

실행에는 몇 분 걸립니다(결과 수는 2000만 개).

문제는 다음과 같이 DISTINCT를 추가할 때 다음과 같습니다.

SELECT COUNT(  DISTINCT field1, field2, field3, field4, field5   )
FROM 
   table1, table2, table3, table4, table5, table6
where (several conditions to join the tables)

실행은 3시간 이상 걸립니다.

이 문제는 DISTINT 동작에 있는 것 같습니다.JOIN 조건은 두 버전 모두 동일하기 때문입니다.DISTINT 버전 실행을 최적화할 수 있는 방법이 있습니까?

감사해요!

실행에는 몇 분 걸립니다(결과 수는 2000만 개).

를 처리하려면count(distinct)MySQL은 20억 개의 행을 정렬해야 합니다.그것은 많은 데이터입니다.

그것은 많은 시간이 걸린다.중간 데이터가 크지 않도록 쿼리를 수정할 수 없는 한 이 문제에 대해 할 수 있는 일이 많지 않습니다.

SQL 문을 변경하거나 테이블의 구조를 변경하지 않으면(예를 들어 일부 인덱스나 새로운 중간 요약 테이블 추가), DISTINT 버전의 쿼리를 더 빨리 실행할 수 없습니다.

경과 시간 측면에서 "큰 암초"는 "파일 정렬 사용" 작업일 수 있습니다.사용하고 있습니다EXPLAIN쿼리 실행 계획을 확인하려면 먼저 MySQL이 어떤 작업을 어떤 순서로 수행하는지 파악해야 합니다.

MySQL 및 MariaDB에는 조정할 수 있는 시스템 파라미터가 몇 가지 있습니다.예를 들어 디스크로 흘리기 전에 MEMORY에 저장해야 할 임시 세트에 메모리를 더 할당하는 경우입니다.그러나 20억 행의 성능 문제를 해결할 수 있는 매직 튜닝은 거의 없습니다.또한 문제를 해결하기 위해 더 나은 하드웨어를 투입할 수 있는 옵션이 항상 있습니다.

SQL 문을 변경하거나 여러 문을 실행하는 데 관심이 있는 경우 튜닝할 수 있습니다.

새로운 선택 문장으로 왼쪽 결합을 시도했는가? 단어만족스러운 단어를 가진 새로운 선택 문장으로?

언급URL : https://stackoverflow.com/questions/60191314/mysql-optimization-distinct-too-slow

반응형