Database

[MySQL] 테이블 생성문에 timestamp & index사용하기

라임오렌지원 2022. 11. 28. 16:19

create 문을 사용할 때 사용하면 좋은 점 몇 가지 조언 받았다.


- timestamp

날짜를 등록하는 날짜 column을 작성할 때

`today` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
`today_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

이런 식으로 작성하여 insert/update 시 column 에 하나씩 넣어줬는데

 

 

`today` timestamp NOT NULL DEFAULT current_timestamp()
`today_update` timestamp NOT NULL DEFAULT current_timestamp()

이렇게 쓰면 최초 로우 생성 시에 today에 현재 시간을 자동으로 넣고,

해당 로우 update 시에 'today_update' 가 현재시간으로 자동으로 변경된다.

 

insert/update 시에 따로 column 에 데이터를 넣지 않아도 된다고 한다.


 

- index

그리고 index를 걸 때

KEY `no` (`no`) USING BTREE

USING BTREE를 쓰지 않아도 자동으로 걸어준다고 한다.

 

따라서,

KEY `no` (`no`)

이렇게 작성해도 된다고 한다.

 

insert 할 때 BTREE 어디에 넣어줄지 정한 후에 값을 넣어주고, select할 시 그 BTREE를 찾아온다고 한다.

 

인덱스를 사용할 때 주의할 점으로,

조회할 컬럼에만 인덱스를 걸어주는게 좋은데

 

특정 Key를 조회하려고 할 때 인덱스가 없으면 select 할 때 성능 저하가 되고,

불필요한 컬럼에 인덱스가 걸려있으면 insert 할 때 성능저하가 일어난다고 한다.

그렇게 큰 저하는 아니지만, 데이터가 많이 쌓이다보면 하나라도 줄여 성능을 높이는게 좋으니까


최종 create 문을 예시로 들자면

CREATE TABLE test_tbl (
  `no` int(10) not null,
  `today` timestamp NOT NULL DEFAULT current_timestamp(),
  `today_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  KEY `no` (`no`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4 ;

이 정도 일 듯

728x90

'Database' 카테고리의 다른 글

[Mysql] on duplicate key update  (0) 2023.08.24
슬레이브(Slave)란?  (0) 2022.11.24
MySQL 인덱스  (0) 2022.09.02
Query Between 과 >=, <= 성능 차이  (2) 2022.08.24
쿼리 Query 최적화 및 튜닝  (0) 2022.08.23