찾다

 >  Q&A  >  본문

mysql 최적화 - mysql 쿼리 중 인덱스 오류 및 스캔된 행 수가 전체 데이터 행 수보다 큰 경우에 대한 질문입니다.

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

세 가지 질문:

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

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

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

淡淡烟草味淡淡烟草味2707일 전1276

모든 응답(1)나는 대답할 것이다

  • 滿天的星座

    滿天的星座2017-06-30 09:54:51

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

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

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

    회신하다
    0
  • 취소회신하다