mysql 최적화 - mysql 쿼리 중 인덱스 오류 및 스캔된 행 수가 전체 데이터 행 수보다 큰 경우에 대한 질문입니다.
淡淡烟草味
淡淡烟草味 2017-06-30 09:52:51
0
1
1294

데이터 테이블은 innodb 엔진을 사용하고,update_at 필드는 일반 인덱스를 사용합니다.

세 가지 질문:

  1. 처음 두 문을 비교해 보면 두 번째 문은 인덱스를 사용하지 않는데, 스캔된 행 수가 특정 수에 도달하면 인덱스가 포기된다는 것을 기억합니다.

  2. 전체 테이블 스캔을 보면 스캔된 행 수가 70341개인데, 전체 데이터 행 수가 57087개에 불과하다고요?

  3. select count(*)는 인덱스를 사용하지만 70341개 행도 검색합니다. 이 문으로 인해 성능 문제가 발생합니까?

淡淡烟草味
淡淡烟草味

모든 응답(1)
滿天的星座
  1. CBO 최적화 메커니즘의 데이터베이스에는 인덱스 사용 여부에 대한 명확한 임계값이 없습니다. 실행 계획의 최소 COST를 기준으로 사용하는 경우는 인덱스를 사용하는 것이 더 적합하다는 것입니다. 테이블의 총 행 수가 5% 미만입니다.

  2. 두 번째 문은 테이블의 통계 데이터를 사용하는 것으로 알고 있습니다. 테이블이 최근에 크게 변경되었고 통계 데이터가 제때 업데이트되지 않은 경우 둘 사이에 큰 차이가 있을 것입니다.

  3. count(*)는 인덱스를 사용합니다. 이는 update_at 필드에 NOT NULL 정의가 있음을 의미합니다. 전체 테이블 스캔에 비해 인덱스 스캔 비용이 더 낮습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿