티스토리 뷰

1. SELECT 시에는 꼭 필요한 COLUMN만 조회한다.

-- BAD
SELECT *
  FROM TABLE;
-- GOOD
SEELECT COLUMN1
      , COLUMN2
   FROM TABLE;

2. WHERE 절에는 연산을 하지 않는다.

-- BAD
SEELECT COLUMN1
      , COLUMN2
   FROM TABLE
  WHERE FLOOR(COLUMN3) = 2;
-- GOOD
SEELECT COLUMN1
      , COLUMN2
   FROM TABLE
  WHERE COLUMN3 = BETWEEN 4 AND 5;

3. LIKE 조회 시 와일드카드 %는 가급적 뒤에만 사용한다.

-- BAD
SEELECT COLUMN1
      , COLUMN2
   FROM TABLE
  WHERE COLUMN3 LIKE '%DF%';
-- GOOD
SEELECT COLUMN1
      , COLUMN2
   FROM TABLE
  WHERE COLUMN3 LIKE 'DF%';

4. SELECT DISTINCT, UNION 과 같이 중복을 제거하는 연산은 자제한다.

중복을 제거하는 연산은 시간이 많이 걸린다. DISTINCT는 원하는 컬럼에 대해서 중복을 제거하는 것이 아니라 SELECT 해온 모든 ROW에서 중복을 제거하므로 속도가 느리다. EXIST, GROUP BY를 활용하는게 좋다.

5. CHAR VS VARCHAR

4byte 이하는 CHAR, 그 이상은 VARCHAR로 선언한다.

6. BLOB VS TEXT

많은 양의 데이터 저장, 디폴트 값 지정불가 등 공통점이 있다. 차이점으로는 BOLB은 대소문자 구분, TEXT는 구분하지 않는다.

7. PRIMARY KEY, UNIQUE KEY

자동으로 인덱스가 생성된다.

8. INNER JOIN

3개 이상의 테이블을 INNER JOIN 할 때 크기가 가장 큰 테이블을 FROM절에 배치하고 INNER JOIN 절에 남은 테이블을 작은 순서대로 배치하는 것이 좋다.

9. EXPLAIN 실행 계획을 확인한다.

성능이 낮은 것 부터 높은 순으로 정렬하였다.

ALL : 테이블을 처음부터 끝까지 탐색하여 데이터를 찾음 (TABLE FULL SCAN)
INDEX : 인덱스를 처음부터 끝까지 탐색하여 데이터를 찾는 방식 (INDEX FULL SCAN)
RANGE : 특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출, 데이터가 방대하지 않다면 준수함. (INDEX RANGE SCAN)
REF : 조인 할 때 PRIMARY KEY 혹은 UNIQUE Key 가 아닌 KEY로 매칭한 경우
EQ_REF : 조인 할 때 PRIMARY KEY로 매칭

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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 31
글 보관함