2017-12-11 18 views
-3

MySQL의 테이블 구조체 enter image description here enter image description here enter image description here enter image description hereMySQL의 범위 질의, 큰 사용 지수 판사 범위

그것은 나를 혼란스럽게 만들 MySQL의 쿼리 범위에 영향을 미치는 사용 지수 !!!!!!!!! 경우 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 간단한에서

+1

스크린 샷을 사용하는 대신 질문에 SQL을 추가하십시오. 또한 도움이 필요한 것이 무엇인지 보여주는 간결한 질문과 중단되는 코드를 보여주는 축소 버전을 포함하십시오. – Hans

답변

0

, 내가 MySQL 데이터베이스가 EXPLAIN SELECT * FROM t_teacher_course_info WHERE teacher_id >1 and teacher_id < 5000 인덱스를 사용하는 실행 사용 INDEX `idx_teacher_id_last_update_time` (`teacher_id`, `last_update_time`)

하지만 경우 t_teacher_course_info ALL

1 SIMPLE 추가 변경 범위 EXPLAIN SELECT * FROM t_teacher_course_info WHERE teacher_id >1 and teacher_id < 10000 ID SELECT_TYPE 테이블 유형이 possible_keys 키있는 key_len 심판 행 idx_teacher_update_time 671082 사용 위치

모든 테이블을 스캔하고 인덱스를 사용하지 않습니다. ny mysql config 아마도 색인을 사용하는 경우 행 수를 판단 할 수 있습니다. !!!!!!!

0

그럴 수 있습니다. 그리고 그것은 실제로 최적화입니다. 보조 키 (예 INDEX(teacher_id))를 사용하는 경우

는 처리는 다음과 같이 진행한다 :

  1. 도달 범위 A B + 트리 인덱스이고,로. 이러한 구조에서는 특정 값 (예 : 1)을 찾은 다음 앞으로 스캔 (5000 또는 10000까지)하는 것이 효율적입니다.
  2. 각 항목에 대해 데이터를 가져와 행을 가져옵니다 (SELECT *). 여기에는 보조 키에 사본 인 PRIMARY KEY이 사용됩니다. PK와 데이터는 함께 클러스터링됩니다. 하나의 PK 값에 의한 각 조회는 효율적 (다시, BTree)이지만, 5000 또는 10000을 수행해야합니다. 따라서 비용 (소요 시간)이 합산됩니다.

A "테이블 스캔"(즉, 어떤 INDEX를 사용하지 않음)는 다음과 같이 진행됩니다

  1. 시작을 테이블의 시작 부분에, PK 순서 (테이블의 B + 트리를 통해 산책) 끝까지.
  2. 각 행에 대해 WHERE 절 (teacher_id의 범위)을 확인하십시오.

20 % 이상의 테이블을 조사해야하는 경우 테이블 스캔은 실제로 보조 인덱스와 데이터간에 앞뒤로 튀는 것보다 빠릅니다.

따라서 "큰"은 약 20 % 정도입니다. 실제 값은 테이블 통계 등에 따라 다릅니다.

최하위 라인 : 최적화 도구를 사용하면됩니다. 가장 잘 아는 시간은입니다.

+0

감사합니다. :) –