티스토리 뷰
SQL 명령문 최적화 하기
보통 일반적인 SQL 명령문의 형식은 쉽게 최적화 되지 않고 긴 처리시간을 갖게된다.
보통 인덱스만 잘 잡아도 최적화는 끝이라고 생각하기 쉽다. 물론 틀린말은 아니다
그만큼 인덱스가 최적화에 있어 중요한 부분이긴 하나 그 이외에 부분을 검토해보고자한다.
학생 테이블 student
서클 테이클 circle
1 OR 연산자를 피하자
WHERE 절에 OR 연산자를 가지고 있다면 SQL 문은 인덱스를 사용하지 않고 처리가 된다. 이러한 명령문을 OR 연산자를 이용하지 않고 처리할 수 있는 방법이 두가지
있다. 하나는 IN 연산자를 가지고 대체하거나 UNION 으로 연결된 두개의 SELECT 문을 명령문으로 대체하는 것이다.
mysql> select sno, name from student where sno='100' or sno='110';
위와 같은 쿼리는 sno 컬럼에 INDEX 가 정의되어 있다고 하더라도 sno 에 대한 INDEX 를 사용하지 않는다. 이 명령어를 대체하여 IN 조건으로 검색해보자
OR 연산자를 IN 으로 대체
UPDATE , DELETE 모두 같이 적용된다.
써클 테이블에서 점수가 100점 이거나 과목이 역사인 학생을 가져와보자
mysql> select sno, name from circle where sno>100 or president=2;
OR 연산자를 UNION 으로 대체
mysql> select sno, name from circle where sno>100 union select sno, name from circle where president=2;
OR 연산자는 UNION 으로 대체할때 주의할점은 SQL은 자동적으로 중복된 행을 제거한다. 그리고 OR 연산자를 가지고 있는 UPDATE, DELETE는 UNION 연산자로 대체
할 수 없다.
2 NOT 연산자를 피하자
WHERE 절에 사용되는 NOT 연산자눈 INDEX 를 사용하지 않는다.
학번이 100 이상인 학생을 구하라
mysql> select sno, name from student where not sno < 100;
mysql> select sno, name from student where sno >= 100;
2 BETWEEN 연산자를 이용하라
특별한 범위를 구하는 WHERE 절에서는 AND 연산자는 INDEX 를 이용하지 않는다. 이러한 조건을 대체하여 BETWEEN 연산자를 대체하여 사용한다.
학생 테이블의 학번 105 부터 109번까지 학생을 구해보자
mysql> select sno, name from student where sno >= 105 and sno <= 108;
위이 조건을 BETWEEN 연산자로 대체하여 보자
mysql> select sno, name from student where sno between 105 and 108;
3 LIKE 연산자의 피해야할 형식
WHERE 절의 조건 LIKE 연산자 사용될때 인덱스는 사용하지 않는다
mysql> select sno, name from circle where sno like '2%';
이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^
'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 |
- Total
- Today
- Yesterday
- 리눅스 명령어
- 미디어쿼리
- 트위터 sns 공유
- APM 설치
- 에디트플러스
- 페이스북 공유소스
- ubuntu
- 트위터 공유소스
- 우분투 다운로드
- 우분투 usb 설치
- CentOS 설치
- mysql 백업
- yum
- mariadb 백업
- 카카오스토리 url 공유
- 반응형 웹
- 트위터 url 공유
- MySQL
- 트위터 공유방법 및 소스
- MYSQL 명령어
- CentOS
- 카카오스토리 공유소스
- 카카오스토리 sns 공유
- 우분투
- crontab
- SQL 함수
- 부트스트랩
- centos 7
- SQL 정렬
- Q6600
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |