작업 중이었던 상당히 복잡한 쿼리를 실행하는 데 8 초가 걸렸습니다. EXPLAIN은 이상한 테이블 순서를 보여 주었고 FORCE INDEX 힌트를 사용해도 인덱스가 모두 사용되지 않았습니다. STRAIGHT_JOIN 조인 키워드를 발견하고 일부 INNER JOIN 키워드를이 키워드로 교체하기 시작했습니다. 상당한 속도 향상을 발견했습니다. 결국이 쿼리에 대해 모든 INNER JOIN 키워드를 STRAIGHT_JOIN으로 바꾸었고 이제 .01 초 안에 실행됩니다.
제 질문은 언제 STRAIGHT_JOIN을 사용하고 언제 INNER JOIN을 사용합니까? 좋은 쿼리를 작성하는 경우 STRAIGHT_JOIN을 사용하지 않을 이유가 있습니까?
해결 방법
정당한 이유없이 STRAIGHT_JOIN을 사용하지 않는 것이 좋습니다. 내 경험으로는 MySQL 쿼리 최적화 프로그램이 내가 원하는 것보다 더 자주 잘못된 쿼리 계획을 선택하지만 일반적으로이를 우회해야 할만큼 충분하지 않은 것입니다.
쿼리 힌트를 사용하지 않는 또 다른 이유는 데이터 분포가 시간이 지남에 따라 변경되거나 테이블이 커짐에 따라 인덱스 선택성이 변경 될 수 있기 때문입니다. 현재 최적 인 쿼리 힌트는 시간이 지남에 따라 차선이 될 수 있습니다. 그러나 최적화 프로그램은 현재 오래된 힌트 때문에 쿼리 계획을 조정할 수 없습니다. 옵티마이 저가 결정을 내 리도록 허용하면 더 유연하게 유지됩니다.
참조 페이지 https://stackoverflow.com/questions/512294
'MySql' 카테고리의 다른 글
MySQL은 innodb 테이블의 행 수를 얻습니다. (0) | 2020.10.17 |
---|---|
MySQL 이 "MySQL 오류 # 1054-알 수없는 열"오류의 원인은 무엇입니까? (0) | 2020.10.17 |
MySQL Inner Join With LIMIT to left table (0) | 2020.10.16 |
MySQL 데이터베이스에서 Doctrine 용 YAML 스키마 또는 모델 생성 (0) | 2020.10.16 |
MySQL PHP를 사용하여 MySQL 테이블에 파일 경로를 삽입하는 방법은 무엇입니까? (0) | 2020.10.16 |
댓글