본문 바로가기

database32

[DB 9편] MySQL 인덱스 성능 관련 정리 (Auto increment, UUID) 목차는 DB 목차 에 있습니다. [DB 9편] MySQL 인덱스 성능 관련 정리 (Auto increment, UUID) PK Auto increment, UUID 관련 정리 PK 에 Auto increment 와 UUID 를 사용했을 때 차이는 다음과 같습니다. Auto Increment 를 사용했을 때, 인덱스 데이터 사이즈가 UUID 보다 작습니다. Auto Increment 를 사용했을 때, INSERT 속도가 더 빠릅니다. 왜 Auto increment 가 INSERT 속도와 인덱스 데이터 사이즈가 작은가? PK 로 Auto increment 를 사용할 경우 클러스터드 인덱스는 1,2,3,4,5 순으로 차례대로 저장이 될 것 입니다. 클러스터드 인덱스 특성상 데이터는 인접하게 저장이 될 것이고,.. 2022. 10. 15.
[DB 6편] MySQL 인덱스 성능 관련 정리 (prefix, 복합인덱스) 목차는 DB 목차 에 있습니다. [DB 6편] MySQL 인덱스 성능 관련 정리 (prefix, 복합인덱스) 인덱스 Prefix MySQL 에서는 인덱스를 설정할 때, 컬럼의 prefix 일부를 인덱스로 설정하는 기능을 제공하고 있습니다. prefix 일부를 사용한다는건 인덱스의 길이가 줄어든다는 의미이며, 인덱스의 길이가 줄어든다는건 인덱스 데이터에 접근할 때, 빠르게 접근이 가능할 확률을 높인다는 의미입니다. 저장하는 공간도 줄어듭니다. 예를 들면 다음과 같습니다. Alter table test add key (index_test_column(3)); test 테이블의 index_test_column 컬럼의 앞의 3글자만 인덱스로 설정합니다. 인덱스 prefix 주의사항 컬럼 전체를 인덱스로 사용하지.. 2022. 10. 13.
[DB 5편] MySQL 데이터 유형 관련 정리 목차는 DB 목차 에 있습니다. [DB 5편] MySQL 데이터 유형 관련 정리 Null 을 사용하지 않는 것이 좋습니다. Application 개발을 할 때와 마찬가지로 null 을 사용하지 않는 것이 좋습니다. MySQL 내부에서 인덱스, 비교 등의 계산을 할 때, null 이 들어가면 resource 소모가 있거나 측정하기 어려우며, 이는 성능 최적화가 어렵습니다. 그러므로 개발을 할 때는, null 을 사용하지 않는 것이 좋으며, 기존 테이블에 null 이 있는 것을 강제로 not null 로 바꿀려고 하는 것은 운영 중인 서비스에 영향을 줄 수 있으므로 심사숙고해야합니다. 또한, null --> not null 로 바꾼다고 성능이 그렇게 향상되는 것은 아닙니다. 문자열 유형 INNO DB 를 기.. 2022. 10. 10.
[DB 4편] SQL Select 튜닝 정리 목차는 DB 목차 에 있습니다. [DB 4편] SQL Select 튜닝 정리 Select 쿼리 튜닝 Block I/O 최소화 하나의 테이블을 조회하는 것은 인덱스를 적절하게 잘 사용만 해도 큰 효과를 봅니다. 테이블 2개일 때 조인은 선행테이블 (기준 테이블) 이 몇 건을 읽어들였는지가 중요합니다. 왜냐하면 대부분의 조인은 Nested Loop (선행 테이블을 기준으로 한건씩 다른 테이블이랑 비교) 로 이루어지며, 앞의 선행테이블을 적게 읽을수록 후행테이블을 조인하는 횟수가 줄어들기 때문입니다. 선행 테이블을 읽어들인 횟수는 실행계획을 통해 알 수 있습니다. 선행테이블, 후행 테이블 모두 적절한 인덱스를 선택해야하며, 인덱스가 없을 때는 생성하는 것이 좋습니다. 단, 해당 인덱스를 생성 함으로써 미치는 .. 2022. 4. 28.