sql 효율 분석 방법

6362 단어 sqlexplain
Explain 명령 은 데이터베이스 성능 을 해결 하 는 데 있어 서 첫 번 째 추천 사용 명령 입 니 다.대부분의 성능 문 제 는 이 명령 을 통 해 간단하게 해결 할 수 있 습 니 다.Explain 은 SQL 문장의 실행 효 과 를 볼 수 있 고 더 좋 은 색인 과 최적화 조회 문 구 를 선택 하여 더욱 좋 은 최적화 문 구 를 쓸 수 있 습 니 다.
문법 설명:
EXPLAIN tbl_name 또는:EXPLAIN[EXTENDED]SELECT selectoptions
전 자 는 하나의 표 의 필드 구조 등 을 얻 을 수 있다.후 자 는 주로 관련 된 색인 정 보 를 제공 하 는데 오늘 이야기 하고 자 하 는 중점 은 후자 이다.
예:

EXPLAIN 
  SELECT sum(amount) 
FROM customer a, payment b 
  WHERE1 = 1 
AND a.customer_id = b.customer_id 
AND a.email = '[email protected]'; 
실행 결과:

다음은 각 속성 에 대해 알 아 보 겠 습 니 다:
1.id:이것 은 SELECT 의 조회 번호 입 니 다.
2、select_type:select_type 은 select 의 유형 입 니 다.다음 과 같은 몇 가지 가 있 습 니 다.
SIMPLE:간단 한 SELECT(UNION 또는 하위 조회 등 사용 하지 않 음)
PRIMARY:가장 바깥쪽 SELECT
UNION:UNION 의 두 번 째 또는 뒤의 SELECT 문구
DEPENDENT UNION:UNION 의 두 번 째 또는 뒤의 SELECT 문 구 는 외부 조회 에 달 려 있 습 니 다.
UNION RESULT:UNION 의 결과.
SUBQUERY:하위 검색 의 첫 번 째 SELECT
DEPENDENT SUBQUERY:하위 조회 의 첫 번 째 SELECT 는 외부 조회 에 달 려 있 습 니 다.
DERIVED:표 내 보 내기 SELECT(FROM 자구 의 하위 조회)
3.table:이 줄 의 데 이 터 를 표시 하 는 것 은 어떤 표 의 실제 표 이름(예 를 들 어 select*from customer)입 니까?또는 표 의 별명(예 를 들 어 select*from customer a);
4.type:이 열 은 가장 중요 합 니 다.연결 이 어떤 종 류 를 사 용 했 는 지,색인 을 사 용 했 는 지,Explain 명령 을 사용 하여 성능 병목 을 분석 하 는 관건 적 인 항목 중 하나 입 니 다.
결과 값 은 좋 은 것 부터 나 쁜 것 까지 다음 과 같다.
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
일반적으로 조회 가 적어도 range 단계 에 이 르 도록 보증 해 야 하 며,ref 에 도달 하 는 것 이 좋 습 니 다.그렇지 않 으 면 성능 문제 가 발생 할 수 있 습 니 다.
all:표 의 첫 번 째 줄 에서 뒤로 한 줄 씩 전체 표 스 캔 을 하 는 것 을 의미 합 니 다.운 이 나 빠 서 마지막 줄 까지 스 캔 을 합 니 다.
index:all 보다 성능 이 조금 좋 습 니 다.
통속 적 으로 말 하면 all 모든 데이터 줄 을 스 캔 하면 data 에 해당 합 니 다.all index 모든 색인 노드 를 검색 하면 index 에 해당 합 니 다.all
주:all 은 디스크 를 따라 스 캔 하고 index 는 색인 을 따라 스 캔 합 니 다.
range:검색 할 때 색인 에 따라 범 위 를 검색 할 수 있다 는 뜻 입 니 다.
explain select * from customer where customer_id > 4;

index_subquery 는 하위 검색 에서 유일한 색인 을 제외 한 색인 을 기반 으로 검색 합 니 다.
unique_subquery 는 하위 검색 에서 유일한 색인 을 기반 으로 스 캔 합 니 다.EQ 와 유사 합 니 다.REF;
index_merge 다 중 범위 스 캔.두 표 가 연 결 된 모든 표 의 연결 필드 에 색인 이 존재 하고 색인 이 질서 가 있 으 며 결 과 는 합 쳐 집 니 다.집합 적 이 고 인도 적 인 조작 에 적용 된다.
ref_or_null 은 REF 와 유사 합 니 다.검색 조건 은 연결 필드 의 값 이 NULL 일 수 있 는 경우,예 를 들 어 where col=2 or col is null 을 포함 합 니 다.
전체 텍스트 전체 텍스트 인덱스
ref 이것 도 색인 접근 입 니 다.특정한 단독 값 과 일치 하 는 모든 줄 을 되 돌려 줍 니 다.그러나 조건 에 맞 는 여러 줄 을 찾 을 수 있 기 때문에 그 는 검색 과 스 캔 의 혼합 체(범위 구간 이지 만 range 보다 더 정확 합 니 다)에 속 해 야 합 니 다.
explain select * from payment where customer_id =4;

eq_ref 란 색인 열 을 통 해 한 줄 의 데 이 터 를 직접 참조 하 는 것 을 말한다(한 줄 의 데이터 에 정확 함).연결 조회 에서 흔히 볼 수 있다.
const,system,null 은 my sql 이 조회 할 수 있 는 부분 을 최적화 시 키 고 상수 로 전환 할 때 이러한 접근 유형 을 사용 합 니 다.예 를 들 어 한 줄 의 메 인 키 를 where 조건 으로 넣 으 면 my sql 은 상수 로 바 꾸 고 조회 할 수 있 습 니 다.
5、possible_keys:MySQL 에서 줄 을 찾 을 수 있 는 색인 을 표시 합 니 다.
6.key:MySQL 이 실제 사용 하기 로 결정 한 키(색인)를 표시 합 니 다.색인 을 선택 하지 않 으 면,키 는 NULL 입 니 다.
7、key_len:MySQL 이 사용 할 키 길 이 를 표시 합 니 다.키 가 NULL 이면 길 이 는 NULL 입 니 다.사용 한 색인 길이 입 니 다.정확성 을 잃 지 않 는 상황 에서 길 이 는 짧 을 수록 좋다.
8.ref:어떤 열 이나 상수 로 key 와 함께 표 에서 줄 을 선택 하 는 지 표시 합 니 다.
9.rows:MySQL 이 조 회 를 실행 할 때 반드시 검사 해 야 한다 고 생각 하 는 줄 수 를 표시 합 니 다.
10.Extra:MySQL 해결 조회 에 대한 상세 한 정 보 를 포함 하고 관건 적 인 참고 항목 중 하나 입 니 다.

using index:      mysql       ,          ,    ! 
using where:                    。  where            ,           ,     ,       where      extra    using where      。 
using temporary:    mysql                    。 
using filesort:    mysql               ,                。 
그 밖 에 explain 의 extended 확장 은 원래 explain 을 바탕 으로 최적화 된 정 보 를 추가 로 제공 할 수 있 습 니 다.이 정 보 는 my sql 의 show warnings 명령 을 통 해 얻 을 수 있 습 니 다.다음은 가장 간단 한 예 이다. 

EXPLAIN EXTENDED
SELECT sum(amount)
FROM customer a, payment b
WHERE 1 = 1
AND a.customer_id = b.customer_id
AND a.email = '[email protected]';


이제 Show Warnings 를 하 겠 습 니 다.

mysql> show warnings;
+---------+------+--------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-------------------------------+
| Level | Code | Message

|
+---------+------+--------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-------------------------------+
| Warning | 1681 | 'EXTENDED' is deprecated and will be removed in a future rele
ase.

|
| Note | 1003 | /* select#1 */ select sum(`sakila`.`b`.`amount`) AS `sum(amou
nt)` from `sakila`.`customer` `a` join `sakila`.`payment` `b` where ((`sakila`.`
b`.`customer_id` = `sakila`.`a`.`customer_id`) and (`sakila`.`a`.`email` = 'JANE
[email protected]')) |
+---------+------+--------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-------------------------------+
2 rows in set (0.00 sec)

최적화 기 가 1=1 항 성립 조건 을 자동 으로 제거 한 것 을 볼 수 있다. 
MySQL 5.1 은 파 티 션 기능 을 지원 하기 시 작 했 고 explain 명령 도 파 티 션 에 대한 지원 을 추가 했다.explain partitions 명령 을 통 해 SQL 이 접근 하 는 파 티 션 을 볼 수 있 습 니 다.

이상 의 explain 에서 sql 효율 을 분석 하 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기