본문 바로가기
Database/MySQL

[MySQL] 기본 문법 - 6

by VictorMeredith 2023. 5. 4.

1. 날짜 / 시간 다루기 

- 연산자가 가능하다

cf) DATETIME(6) : 6 쓰면 좋음(소수점 이하 6자리의 초를 나타내게 하여 정밀도를 높인다.)

 

- 응용 예시

5월2일부터 오늘까지

- SELECT DATE_FORMAT('2022-03-09 13:24:11, '%Y년 %M월 %D일') 

: '2022년 March월 9th일' 이렇게 뜬다. 자세한 사용법은 chatGPT 하자

 

2. STORED FUNCTION : 계산을 저장한다.

뻥션 안에서 SELECT 문 사용 금지다

 

3. IF / THEN / ELSE

- IF는 procedure, function 안에서만 가능하다.

 

- 응용

 

4. INDEX (인덱싱)

 1) 개요

  - DB에서 데이터를 더 빠르게 검색하고 접근하게 도와주는 자료구조이다.

  - 책의 색인과 비슷하다.

  - Column에 대한 데이터 값과 위치에 대한 정보를 매핑하게 된다.

  - 따라서, 인덱스가 있는 Column에 대한 쿼리는 전체를 스캔하지 않아도 된다.

  - 신중하게 사용해야 한다. DB공간을 차지하고, 매번 갱신해야 하기 때문에 리소스가 사용되기 때문이다.

  - 일반적으로 Tree형태로 되어있는 경우가 많다. (B-Tree, B+Tree)

  - B+Tree 는 Node에 guide를 저장하며, 범위 검색에 유리하다. (data는 가장 아래 node에 저장된다.)

  - Primary Key는 자동으로 인덱싱 된다.

 

 2) INDEX 만들기 - 1

  - 분석하기) DBeaver에서 정렬 실행 시에 실행계획보기 누르면 cost가 나오는데 이게 십만단위가 되면 좀 거시기 해진다.

  - INDEX를 사용해서 cost를 낮춰야한다.

  - access_type : ALL -> 모든 행을 스캔한다는 뜻이므로 ALL이 안 떠야 한다.

  - filtered : percentage 단위이며, 100% 에 가까울수록 좋다.

 

 3) INDEX 만들기 - 2

  - DBeaver에서는 우클릭으로 간단히 생성이 가능하다.

  - Workbench에서는 플로우차트까지 보여주니까 더 좋다.

 

 4) 다중 Column 인덱스

  - WHERE조건에서 식에 들어간 Column들이 있을 경우 빨라진다.

  - check 시에 순서가 중요하다. 맨앞에꺼는 단독 Column 조건에서도 작동하도록 세팅된다.

  - Cardinality(고유한 정도)가 높은 Column을 앞쪽 INDEX에 둔다.

  - 왜냐면, 행 접근수가 낮아지고, DB의 쿼리 최적화에 유리해지며, 쿼리가 실행되는 동안 데이터가 더 빨리 필터링된다. 또한 인덱스가 압축되어 공간최적화에 유리해지기 때문이다.

댓글