본문 바로가기

db/MySql

(5)
SELECT 최적화 SELECT 처리 순서 하나의 실행 계획 단위에서 키워드가 적용되는 순서는 다음과 같다. WHERE → JOIN → GROUP BY → DISTINCT → HAVING → ORDER BY → LIMIT 원하는 키워드를 먼저 실행하고 싶다면 서브 쿼리를 이용하여 실행 계획을 분리하여 순서를 임의 변경하여 실행할 수 있다. 하지만 서브 쿼리를 이용하면 조인을 사용하는 것보다 성능 상 좋지 않기 때문에 잘 판단하여 쿼리를 작성하는 것이 좋다. MySQL의 LIMIT VS Oracle ROWNUM MySQL의 LIMIT은 오라클의 ROWNUM과 성격이 달라서 WHERE 조건으로 사용되지 않고 항상 모든 처리의 결과에 대하여 레코드 건수를 제한하는 형태로 사용한다. 각 키워드의 성능 최적화 방식 성능을 이끌어 내..
MySQL 연산자와 내장 함수 연산자 동등 비교 Null safe NULL을 하나의 값으로 인식하고 비교함으로 NULL을 반환하지 않는다. Null unsafe = NULL을 비교시에는 NULL을 반환한다. 부정 비교 , != NOT 연산 !, NOT AND, OR 연산 divide 연산 /, DIV, %, MOD REGEXP 연산 REGEXP, RLIKE 정규 표현식을 비교하는 연산자 문자열 칼럼 비교에 사용할 때 REGEXP 조건의 비교는 인덱스 레인지 스캔을 사용 X LIKE 연산 % : 0 또는 1 이상의 모든 문자 _ : 정확히 하나의 문자 ESCAPE : %, _ 문자 비교를 위해서 escape 문자를 설정하여 %, _사용이 가능하게 함 ex) select ‘a%’ LIKE ‘a/%’ ESCAPE ‘/‘; BETWEEN 연..
MySQL의 주요 처리 방식 1. 풀 테이블 스캔 풀테이블 스캔이란? 인덱스를 사용하지 않고 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업 MyISAM 스토리지 엔진 풀 테이블 스캔시 디스크로부터 페이지를 하나씩 읽어 온다. InnoDB 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업을 자동으로 시작한다. 이 경우 필요한 데이터를 미리 읽어 두었기 때문에 좀 더 빠른 성능을 보장할 수 있다. + Read ahead? 어떤 영역의 데이터가 앞으로 필요해지리라는 것을 예측해서 요청이 오기 전에 미리 디스크에서 읽어 InnoDB의 버퍼 풀에 가져다 두는 것 2. ORDER BY 처리, Using filesort 인덱스를 사용한 정렬 이미 정렬된 기준이 인..
DB 실행 계획 분석 EXPLAIN - 2 Intro 실행 계획 분석 1에 이어서 다른 컬럼을 살펴보자. 5. key 칼럼 실행계획에서 사용할 인덱스 정보를 나타내는 컬럼이다. 인덱스를 사용하지 못하는 경우에는 NULL이 표시된다. 사용할 인덱스 정보를 통해서 실행 쿼리가 어떤 인덱스를 사용해 최적화를 이루는지 알 수 있게 한다. 6. ken_len 칼럼 key로 사용할 인덱스가 단일로 사용될 수도 있지만 복합적으로 여러개의 인덱스를 사용할 수 있다. key_len을 통해서 인덱스의 각 레코드에서 몇 바이트까지 사용했는지를 알 수 있다. 7. ref 칼럼 접근 방식(type)이 ref 방식이면 참조조건으로 어떤 값을 이용하는지를 보여주는 칼럼이다. +) 만약 이 값이 func 으로 표시된다면 조인 칼럼 타입이 일치하지 않아서 추가적인 가공처리(타..
DB 실행 계획 분석 EXPLAIN - 1 데이터 베이스에서 실행 계획을 분석함으로써 효과적인 쿼리를 사용하는지 분석할 수 있다. 그 명령에 사용되는 것이 EXPLAIN 명령어이다. EXPLAIN 명령을 실행하면 실행 계획을 산출한다. 실행 계획을 나타내는 각 컬럼이 무슨 정보를 가지고 있는지 알아보자. 1. id 칼럼 실행계획에 대한 id 정보 같은 id를 가진다면 조인을 한다는 것. 2. select_type 칼럼 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼으로 다음 값을 가지고 있다. SIMPLE 서브쿼리나 유니온을 사용하지 않은 아주 단순한 쿼리 PRIMARY 유니온이나 서브쿼리가 포함된 쿼리에서 가장 바깥에 실행되는 쿼리 UNION 유니온 연산이 필요한 쿼리 B의 경우를 보면 알 수 있다. UNION RESULT 유니온의 결과를 담아두는 ..