728x90
사거블(Search ARGument able) 쿼리
- =, >, <, >=, <=, BETWEEN, LIKE(검색 문자열 앞에 %를 붙이지 않을 때), IS [NOT] NULL
- <>, IN, OR, NOT IN, NOT EXISTS, NOT LIKE -> 사거블이지만 좀처럼 사용 안함
- 인덱스 사용 못하는 경우
- WHERE절 조건에서 한 개 이상의 필드에 대해 연산하는 함수 사용 쿼리
- WHERE절에서 필드에 대해 수치 연산 하는 경우
- LIKE '%something%'처럼 %를 사용하는 경우
인덱스 사용 가능(사거블) vs 사용 불가능(넌사거블)
- 인덱스 사용 불가능 : WHERE YEAR(~) = 1950;
- 인덱스 사용 가능 : WHERE ~ >= CAST('1950-01-01' AS Date) AND ~ < CAST('1951-01-01' AS Date);
- 인덱스 사용 불가능 : WHERE LEFT(~, 1) = 'S';
- 인덱스 사용 가능 : WHERE ~ LIKE 'S%';
- 인덱스 사용 불가능 : WHERE ISNULL(~, 'V') = 'V';
- 인덱스 사용 가능 : WHERE ~ = 'V' OR ~ IS NULL; -> OR 사용하면 인덱스 사용 못할 수도 있음
- 개선된 쿼리 : WHERE ~ = 'V' UNINO ALL ~~~ WHERE ~ IS NULL;
- 인덱스 사용 불가능 : WHERE ~ * 1.10 > 10000;
- 인덱스 사용 가능 : WHERE ~ > 10000/1.10;
- 핵심
- 넌사거블 연산자를 사용하지 않는다.
- WHERE 절에서 하나 이상의 필드에 대해 연산하는 함수를 사용하지 않는다.
- WHERE 절에서 필드에 대한 수치 연산을 수행하지 않는다.
- LIKE 연산자를 사용할 때 % 문자는 검색 문자열 끝에 붙인다('%SOMETING%' 또는 'SOME%THING'처럼 사용하지 않는다.)
LEFT 조인의 오른쪽 데이터를 올바르게 걸러 내자
- SQL에서 차감 연산을 할 때는 OUTER JOIN을 사용한다.
- LEFT 조인의 오른쪽에 대해(또는 그 반대로) 밖에 있는 WHERE절에서 필터 조건을 적용하면 원하는 결과를 얻지 못한다.
- 걸러 낸 부분 집합을 제대로 차감하려면, 데이터베이스 시스템이 외부 조인을 수행하기 전에 데이터를 걸러 내야 한다.
CHAPTER 5. 집계
GROUP BY 절의 작동 원리를 이해하자
- ROLL UP은 오른쪽에서 왼쪽으로 연산한다.
- GROUPING SETS은 여러 쿼리를 UNION한 결과와 동일한 결과를 산출한다.
- 집계 수행 전 WHERE 절이 적용된다.
- GROUP BY 절은 필터링된 데이터 집합을 집계한다
- HAVING 절은 집계된 데이터 집합을 다시 필터링한다.
- ORDER EBY 절은 변형된 데이터 집합을 정렬한다.
- SELECT 절에서 집계 함수나 집계 계산에 포함되지 않은 컬럼은 GROUP BY 절에 명시해야한다.
- ROLL UP, CUBE, GROUPING SETS를 사용하면, 여러 집계 쿼리를 UNION으로 연결하는 대신 쿼리 하나로 좀 더 가능한 조합 결과를 산출할 수 있다.
728x90
'프로그래밍공부(Programming Study) > 데이터베이스(Database)' 카테고리의 다른 글
MongoDB 특징 및 설치/환경설정 (0) | 2023.01.03 |
---|---|
MySQL 버전별 차이 (0) | 2022.12.03 |
MySQL W3CSchool 번역 4일차(MySQL부분 완료) (0) | 2022.05.10 |
W3C MySQL 정리/번역 2/3일차(Wildcard ~ ANY 연산자) (0) | 2022.05.07 |
W3C MySQL 정리/번역 1일차(MySQL 개요 ~ LIKE 연산자) (0) | 2022.05.05 |
댓글