Dev/Database

[Oracle] DB 유용한 팁

알굼 2024. 2. 16. 14:47
반응형

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. 공부할 것

  - 힌트
  - 피봇

 

 

 

 

 

반응형