물리적 모델링
은 실제로 만들 데이터베이스에 가장 가깝게 데이터 모델을 만드는 과정이다.
네이밍
이란 이름을 짓는 과정이다. 어떤 규칙을 정하는지보다 정해진 규칙을 잘 따르는 게 더 중요하다. 따라서 처음에 규칙을 최대한 명확하게 정하고 이를 따르는 게 좋다.
단수 / 복수 정하기
컬럼 이름은 단수를 사용하는 것을 선호한다.
ex) user vs users
대문자 / 띄어쓰기 정하기
ex) user_id vs UserId
줄이말 정하기
ex) social_cecurity_number vs ssn
📝 데이터 타입을 잘 정해야 하는 이유
Clustered 인덱스
는 테이블 자체를 특정 순서로 저장하는 인덱스이다.
Non-Clustered 인덱스
는 테이블 자체는 그대로 놔두고 다른 곳에 순서를 저장한다.
인덱스
를 사용하면 특정 조건의 데이터를 찾는 조회를 빠르게 할 수 있다.
그렇지만 모든 컬럼과 모든 컬럼의 조합에 인덱스를 추가하지는 않는다.
용량 문제
용량을 너무 많이 사용하면 데이터베이스가 느려질 수 있다.
인덱스 업데이트 문제
하나의 row 값을 바꾸려면, 해당 컬럼이 포함된 모든 인덱스를 수정해야 한다. 따라서 조회는 빠르게할 수 있지만 삽입, 업데이트, 삭제는 오히려 느리게 만든다.
📝 인덱스 추가 기본 원칙
- 모든
Primary Key
에 대해서 인덱스를 만들어 준다.- 모든
Foreign Key
에 대해서 인덱스를 만들어 준다.- 특정 조회 쿼리가 너무 느려지거나, 느려질 게 확실한 경우 조회에 사용되는 컬럼들에 대해서 인덱스를 만들어 준다.
✅ Clustered 인덱스 만들기
MySQL에서는 자동으로 각 테이블이 Primary Key에 대한 clustered 인덱스가 만들어진다.
만약 기본키가 아닌 다른 컬럼을 clustered 인덱스
로 사용하고 싶다면, clustered 인덱스는 테이블당 하나씩 밖에 있을 수 없기 때문에 먼저 기존 인덱스를 삭제한 후 아래 코드를 진행한다.
CREATE CLUSTERED INDEX index_name ON table_name (column_name)
✅ Non-Clustered 인덱스 만들기
Non-Clustered 인덱스
는 개수 상관없이 여러 개를 만들 수 있기 때문에 이미 있는 인덱스를 삭제할 필요가 없다.
CREATE INDEX index_name ON table_name (column_name)
✅ Composite 인덱스 만들기
CREATE INDEX index_name ON table_name (column_name1, column_name2, ...)
✅ 인덱스 확인하기
만야 테이블 안에 있는 모든 인덱스에 대한 정보를 확인하고 싶다면 다음과 같이 코드를 실행한다.
SHOW INDEX FROM table_name;
✅ 인덱스 삭제하기
DROP INDEX index_name ON table_name;
✅ 인덱스 사용하기
SELECT
문을 사용한다.