티스토리 뷰

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SQL 명령문 최적화 하기

SQL 명령문 최적화 하기

SQL 명령문 최적화 하기


보통  일반적인 SQL 명령문의 형식은 쉽게 최적화 되지 않고 긴 처리시간을 갖게된다. 


보통 인덱스만 잘 잡아도 최적화는 끝이라고 생각하기 쉽다. 물론 틀린말은 아니다


그만큼 인덱스가 최적화에 있어 중요한 부분이긴 하나 그 이외에 부분을 검토해보고자한다.



SQL 명령문 최적화 하기


학생 테이블 student



SQL 명령문 최적화 하기



서클 테이클 circle


1 OR 연산자를 피하자


WHERE 절에 OR 연산자를 가지고 있다면 SQL 문은 인덱스를 사용하지 않고 처리가 된다. 이러한 명령문을 OR 연산자를 이용하지 않고 처리할 수 있는 방법이 두가지 


있다.  하나는 IN 연산자를 가지고 대체하거나 UNION 으로 연결된 두개의 SELECT 문을 명령문으로 대체하는 것이다.


mysql> select sno, name from student where sno='100' or sno='110';



SQL 명령문 최적화 하기



위와 같은 쿼리는 sno 컬럼에 INDEX 가 정의되어 있다고 하더라도 sno 에 대한 INDEX 를 사용하지 않는다. 이 명령어를 대체하여 IN 조건으로 검색해보자


OR 연산자를 IN 으로 대체



SQL 명령문 최적화 하기



UPDATE , DELETE 모두 같이 적용된다.


써클 테이블에서 점수가 100점 이거나 과목이 역사인 학생을 가져와보자


mysql> select sno, name from circle where sno>100 or president=2;


SQL 명령문 최적화 하기



OR 연산자를 UNION 으로 대체


mysql> select sno, name from circle where sno>100 union select sno, name from circle where president=2;


SQL 명령문 최적화 하기



OR 연산자는 UNION 으로 대체할때 주의할점은 SQL은 자동적으로 중복된 행을 제거한다. 그리고 OR 연산자를 가지고 있는 UPDATE, DELETE는  UNION 연산자로 대체


할 수 없다.


2 NOT 연산자를 피하자


WHERE 절에 사용되는 NOT 연산자눈 INDEX 를 사용하지 않는다.


학번이 100 이상인 학생을 구하라


mysql> select sno, name from student where not sno < 100;


SQL 명령문 최적화 하기


mysql> select sno, name from student where sno >= 100;


SQL 명령문 최적화 하기




2 BETWEEN 연산자를 이용하라


특별한 범위를 구하는 WHERE 절에서는 AND 연산자는 INDEX 를 이용하지 않는다. 이러한 조건을 대체하여 BETWEEN 연산자를  대체하여 사용한다.


학생 테이블의 학번 105  부터 109번까지 학생을 구해보자


mysql> select sno, name from student where sno >= 105 and sno <= 108;


SQL 명령문 최적화 하기


위이 조건을 BETWEEN 연산자로 대체하여 보자


mysql> select sno, name from student where sno between 105 and 108; 


SQL 명령문 최적화 하기




3 LIKE 연산자의 피해야할 형식


WHERE 절의 조건 LIKE 연산자 사용될때 인덱스는 사용하지 않는다


mysql> select sno, name from circle where sno like '2%';



SQL 명령문 최적화 하기



이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^


'DEVELOPE > MYSQL&MARIADB' 카테고리의 다른 글

SQL 함수 (숫자제어 집계함수)  (0) 2017.10.21
SQL 함수 (문자열 데이터조작)  (0) 2017.10.20
SQL VIEW 생성, 사용법  (0) 2017.10.19
SQL INDEX 설명, 사용법  (0) 2017.10.19
SQL JOIN 조인 메뉴얼  (0) 2017.10.18
댓글