수련: https://github.com/egoingsb/offline/wiki/database---mysql
강의: https://opentutorials.org/module/4134/25352
물리적 모델링
: 이상적인 표를 구체적인 제품에 맞는 현실적인 표로 만드는 것
: 가장 중요한 것은 성능
데이터베이스 샘플을 분석해보자
대용량 데이터베이스 샘플
- https://github.com/egoingsb/offline/raw/master/mysql/employees.zip
- employees 스키마를 생성한 후에 MySQL Workbench의 Menu> Server> Data import를 하시면 됩니다.
- erd로 보기
mysql workbench에서 데이터베이스를 erd로 보는 방법 https://dololak.tistory.com/457
독립적인 것부터 보자.
employees와 department는 아무한테도 종속되어 있지 않음.
dept_manger와 dept_emp는 매핑 테이블
- 만들어진 결과물의 "쓰기 파트"에 해당되는 것을 뽑아보면 됨
데이터베이스의 성능을 파악해보자
하나의 방법 - 느려질때까지 쓰는 방법
말고,,
고도화된 여러 방법을 살펴보자
이렇게 성능을 분석하고 개선하는 것을 => 프로파일링 한다 라고 함.
- slow query 설정 하는 법
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 5
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements
query 시간이 5초가 넘어가면 자동으로 로그에 찍힘.
mysql의 장점 -> 쿼리 진행 시간을 볼 수 있음
ex) use employees;
select * from employees where first_name="Jiang" and last_name="Lueh";
이 쿼리문의 시간을 줄이고 싶다.
인덱스를 추가
(시간이 많이 걸리기에 밤에 시작.)
인덱스를 추가할 때 (first_name, last_name)을 추가한다고 할 때 이를 선택하는 순서가 중요.
ex. firstname을 먼저 걸고 lastname을 인덱스를 건 상황이라면,
firstname과 lastname을 쓰며 - 인덱스 사용 o
firstname 쓰면 - 인덱스 사용 o. 조금이긴 하지만 씀
lastname 쓰면 - 인덱스 아예 안 쓰는 것과 같음
인덱스 추가하고 쿼링하면 시간이 많이 줆을 알 수 있음.
인덱스 특징:
insert할 때는 느려지나, read는 훨씬 빨라지므로 이런 성격에 잘 맞는 특정 칼럼에 index를 추가하는 것이다. 데이터베이스의 스트럭쳐를 바꾸지 않아도 되는 것이 큰 장점이다.
인덱스 추가 방법 : https://ra2kstar.tistory.com/96
general.log
에 너무 지저분하면
쓰기 부분에 제목에 'ㅁㄴㅇ러미날' 본문 내용에 '수진이짱' 이렇게 해놓고 저 특정 내용을 로그에서 검색해보면 insert를 어떤 테이블에 하고 또 구조를 조금 더 쉽게 알 수 있음.
mysql log 종류: https://iamjoso.tistory.com/24
'DATABASE > MySQL' 카테고리의 다른 글
[JDBC] insert 작업 시 주의사항 (0) | 2019.12.29 |
---|---|
[MySQL] 관계형 데이터 모델링 2 (논리적 모델링) - 정규화 (0) | 2019.08.29 |
[MySQL] 관계형 데이터 모델링 2 (논리적 모델링) - 1:1, 1:N, N:M 관계 맵핑하기 (0) | 2019.08.26 |
[MySQL] 관계형 데이터 모델링 1 (개념적 모델링) - join과 entity relationship diagram (0) | 2019.08.25 |
[MySQL] 관계형 데이터베이스의 응용 - client와 server, php 실습코드 (0) | 2019.08.25 |
Comments