728x90
쿼리가 너무 느린부분이 있어 실행계획을 살펴보다 또 볼 날이 있을 듯 하여 올림.
===
명령어.
인덱스 확인:
SHOW INDEX FROM <테이블명>;
ex:SHOW INDEX FROM stop_orders;
인덱스 추가:
//인덱스 정렬은 8.0부터 가능하다.
CREATE INDEX <인덱스명> ON <테이블명> ( 칼럼명1, 칼럼명2, ... );
또는
ALTER TABLE <테이블명> ADD INDEX <인덱스이름> (칼럼명1, 칼럼명2, ...);
ex: ALTER TABLE stop_orders ADD INDEX index_stop_orders_on_order_id (order_id desc);
인덱스 삭제:
ALTER TABLE <테이블명> DROP INDEX <인덱스이름>;
ALTER TABLE stop_orders DROP INDEX index_stop_orders_on_order_id;
=========
테이블 용량 확인 MB로 보여짐
SELECT table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = DATABASE()
AND table_name = 'orders';
=========
실행계획
explain select query...
- 항목
- id : 쿼리 내의 select 문의 실행 순서
- select_type: select 유형
- SIMPLE: 단일 테이블에서 데이터를 검색하는 경우
- PRIMARY: 복잡한 쿼리에서 가장 바깥 쿼리를 처리하는 경우
- SUBQUERY: 부가적인 서브쿼리를 처리하는 경우
- DERIVED: FROM 절에서 파생된 테이블을 처리하는 경우
- UNION: UNION이나 UNION ALL로 여러 개의 SELECT 문을 처리하는 경우
- DEPENDENT UNION: UNION 처리에서 이전 SELECT의 결과에 의존해 처리해야 하는 경우
- UNION RESULT: UNION 결과를 처리하는 경우
- DEPENDENT SUBQUERY: 서브쿼리 처리 중 외부 쿼리 결과에 의존해야 하는 경우
- DEPENDENT UNION RESULT: UNION 결과를 처리하는 과정에서 이전 SELECT 결과에 의존해야 하는 경우
- => 보통 SIMPLE이 가장 빠르고, SUBQUERY, DERIVED, UNION, DEPENDENT SUBQUERY, DEPENDENT UNION, UNION RESULT, DEPENDENT UNION RESULT 순으로 처리 속도가 느려집니다.
하지만 쿼리의 구성에 따라 다를 수 있으므로, 개별적으로 확인하는 것이 좋습니다.
- 테이블: 참조하고 있는 테이블
- type: 조인 타입 아래로 갈수록 안좋은 형태
- 1. system : 테이블에 단 하나의 행만 존재(=시스템 테이블). const 조인의 특별한 형태이다.
- 2. const : 하나의 매치되는 행만 존재하는 경우. 하나의 행이기 때문에 상수로 간주되며, 한번만 읽어들이기 때문에 무척 빠르다.
- 3. eq_ref : 조인수행을 위해 각 테이블에서 하나의 행만이 읽혀지는 형태. const 타입 외에 가장 훌륭한 조인타입이다.
- 4. ref : ref조인에서 키의 가장 왼쪽 접두사 만 사용하거나 키가 a PRIMARY KEY또는 UNIQUE인덱스 가 아닌 경우 (즉, 조인이 키 값을 기반으로 단일 행을 선택할 수없는 경우) 사용된다. 사용되는 키가 몇 개의 행과 만 일치하는 경우 이는 좋은 조인 유형이다.
- 5. fulltext : fulltext 색인을 사용하여 수행된다.
- 6. ref_or_null : 이 조인 유형은 비슷 ref하지만 MySQL이 NULL값 을 포함하는 행을 추가로 검색한다는 점이 다르다. 이 조인 유형 최적화는 하위 쿼리를 해결하는 데 가장 자주 사용된다.
- 7. index_merge : 인덱스 병합 최적화가 적용되는 조인타입. 이 경우, key컬럼은 사용된 인덱스의 리스트를 나타내며 key_len 컬럼은 사용된 인덱스중 가장 긴 key명을 나타낸다.
- 8. range : 인덱스를 사용하여 주어진 범위 내의 행들만 추출된다. key 컬럼은 사용된 인덱스를 나타내고 key_len은 사용된 가장 긴 key부분을 나타낸다. ref 컬럼은 이 타입의 조인에서 NULL 이다. range 타입은 키 컬럼이 상수와 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN 또는 IN 연산에 사용될때 적용된다.
- 9. index : 이 타입은 인덱스가 스캔되는걸 제외하면 ALL과 같다. 보통 인덱스 파일이 데이터 파일보다 작기 때문에 ALL보다 빠르다.
- 10. ALL : 이전 테이블과의 조인을 위해 풀스캔이 된다. 만약 조인에 쓰인 첫 테이블이 고정이 아니라면 비효율적이다. 그리고 대부분의 경우 아주 느리며, 보통 상수값이나 상수인 컬럼값으로 row를 추출하도록 인덱스를 추가하여 ALL 타입을 피할 수 있다.
- possible_keys: 사용할 수 있는 인덱스를 나타냄
- key: mysql이 사용한 key 또는 인덱스를 나타냄
- key_len: 사용한 인덱스의 길이 key 컬럼이 null 이면 null 임
- ref: 행을 추출할떄 사용 된 컬럼이나 상수값
- rows: 찾아야할 row 의 수(추정치- 정확하지않음)
- extra: 해석에 대한 추가 정보.
- Using filesort: 정렬을 위해 파일 정렬 알고리즘을 사용하고 있음
- Using temporary: 쿼리 처리를 위해 임시 테이블을 사용하고 있음
- Using index: 인덱스를 사용하고 있음
- Using index condition: 인덱스 필터링을 사용하고 있음
- Using where: WHERE 절에 대한 추가적인 조건을 확인하고 있음
- Using join buffer: 조인 처리를 위해 버퍼를 사용하고 있음
- Using sort_union(): UNION 처리를 위해 정렬을 사용하고 있음
- Using intersect(): INTERSECT 처리를 위해 사용하고 있음
- Using union(): UNION 처리를 위해 사용하고 있음
- Using index for group-by: GROUP BY 절에서 인덱스를 사용하고 있음
- Using filesort for group-by: GROUP BY 절에서 파일 정렬 알고리즘을 사용하고 있음
- Using index for order-by: ORDER BY 절에서 인덱스를 사용하고 있음
- Using filesort for order-by: ORDER BY 절에서 파일 정렬 알고리즘을 사용하고 있음
- Range checked for each record: 인덱스를 사용하여 범위 검색을 수행하고 있음
- Using index for group-by: GROUP BY 절에서 인덱스를 사용하고 있음
- Using index for distinct: DISTINCT 처리를 위해 인덱스를 사용하고 있음
- Using index for group-by/distinct: GROUP BY 또는 DISTINCT 처리를 위해 인덱스를 사용하고 있음
- Using where with pushed condition: WHERE 절에서 조건을 확인하고 있는데, 인덱스 필터링으로 인해 조건 검사를 더 효율적으로 처리할 수 있음
- Using join buffer (Block Nested Loop, Batched Key Access): 조인 처리를 위해 버퍼를 사용하고 있음
아래는 show index from table 했을시 나오는 정보
https://jeong0427.tistory.com/105
1. root: 전체 쿼리의 실행 계획을 나타내는 루트 노드
2. select_type: SELECT 쿼리의 유형
3. type: 테이블의 접근 방법
4. possible_keys: 선택 가능한 인덱스
5. key: 실제 선택된 인덱스
6. key_len: 선택된 인덱스의 길이
7. ref: 인덱스의 비교 대상
8. rows: 인덱스를 탐색할 때 탐색해야 할 행 수
9. filtered: 조건절에 맞게 필터링된 행 수의 비율
10. Extra: 추가 정보 (옵티마이저가 실행 계획을 만드는 과정에서 고려한 다른 요인들)
728x90
댓글