SW-PRODUCT/개발

MySQL Tips...

굴돌 2013. 11. 13. 11:25


Index Prefix

* index 지정할 때 prefix를 주면 컬럼 값 중에 지정된 길이만큼만 index에서 관리한다.

* index에서 prefix 길이만으로 row를 찾고, 이때 여러 row이면 실제 컬럼값을 참조해서 결정한다.

* Blob, Text 타입도 index prefix를 지정해주기만 하면 index 걸 수 있다.


InnoDB는 무조건 Clusted Index로 저장된다.

* 데이터 추가될 때


InnoDB > Delete vs Update performance

* index가 안걸린 컬럼을 update하는 경우 delete보다 더 빠를 수 있다?

* http://stackoverflow.com/questions/824936/mysql-performance-delete-or-update



Insert on Duplicate...

* duplicated여서 update를 하게 되더라도 AutoIncrement 값은 증가한다.

* 이 query가 대량으로 요청들어오면서 duplicate가 자주 발생하는 경우 내부적으로 deadlock이 걸릴 수도 있다.

ㄴ 차라리 insert ignore를 쓰는 것이 안전하다.


MySql의 Date 타입은 시간정보가 없다!

* MySql의 Date 타입은 년-월-일 정보만 있다.

* 년월일시분초 정보를 알려면 Datetime 타입을 써야 한다.


모든 Join은 Single Thread 방식의 Nested Loop이다!

* Hash Join 같은건 없다.

* 느낌상 작은쪽을 미리 select해서 상수화 시키고 join 수행하는 것도 없는 것 같다.

ㄴ where in (select a from t1)와 동일한 in (a,b,c,d...)의 성능 차이가 엄청나게 많이 난다.

* Oracle처럼 병렬처리 해주는 기능 따위는 없다.