1. DB에서 NULL 값이 있으면 안좋은 이유
- IS NULL, IS NOT NULL 처럼 조건절에서 NULL 사용시 인덱스를 타지않음.
- 조건절에 NULL 걸릴거같으면 NOT NULL 이 낫고, 웬만하면 공백이 나음.
- 테이블에 인덱스 걸어놔도 NULL 컬럼있으면 인덱스 안탐
2. NOT
- NOT 은 느림 무조건 EQUAL(=) 이 좋음
- NOT IN, NOT EXISTS 는 인덱스를 안타서 오래걸림
∴ 웬만하면 EXISTS 가 나음
3. 인덱스
- 결합인덱스 쓰면 row 갯수 줄어서 스캔 적게해도 되므로 좋음.
- 몇 만건까지는 인덱스가 없어도 잘 조회될 수 있으나, 백만건 이상이면 인덱스 안걸려있을 때 안나옴.
백만건, 천만건이어도 인덱스만 잘 걸려있으면 잘 나옴. **
4. 조인
- 해시조인, 머지조인 시 풀스캔 함. 10개 * 10개 = 100번 스캔
- 결합이면 10 번타는건데 조인 잘못 걸려잇으면 100 번 스캔
- 작은거부터 시작 (모수가 작아야함) 해서 스캔
- GROUP BY 안걸려 있으면 해시조인 안쓰는게좋아
5. 뷰
- 뷰 생산성은 좋긴한데 만들수 있는사람 많이 없음. SI 프로젝트시 새로 투입된 개발자들이 구조를 잘 모르니까 뷰를 갖다써라 라는것
6. 서브쿼리
- 쿼리중간에 카운트 들어가면 엄청 느림 -> 한줄 읽고 관련된 다른 쿼리읽어서 카운트, 또읽고 카운트,… 오래걸림
- 서브쿼리가 일반적으로 빠름. 카운트 안하는법을 찾아야함
7. 쿼리가 느릴 때
- 조건절에 function 사용시 속도 느릴 수 있음.
- 속도 느린원인 찾을때 조건절, 조인 하나씩 지워가며 확인하기
- 실행계획을 살펴보는 것도 좋은데, DB 실행계획 확인시 빨간색이 문제가 있다고 보는게 맞고 최대한 풀스캔 피해야함.
8. 공부할 것
- 힌트
- 피봇
'Dev > Database' 카테고리의 다른 글
[Oracle/DBeaver] 프로시저 디버깅 하는법 (0) | 2024.04.30 |
---|---|
[Oracle] 프로시저 실행하는 법 (0) | 2024.04.19 |
[MSSQL] PK 수정, PK 변경, PK 추가 (0) | 2023.12.20 |
[MSSQL] DB 배치 추가하는법, SSMS 배치 등록, DB 배치등록 (1) | 2023.12.18 |
[MSSQL] mssql 테이블 컬럼추가, mssql 제약조건 추가 (0) | 2023.12.15 |