-
[M1 Mac] Mysql 명령어 정리 (+ docker로 설치)Spring Boot/DB 2023. 6. 27. 14:05
00. Workbench 단축키
cmd + t 탭 생성 cmd + w 탭 삭제 cmd + shift + enter : 전체 쿼리 실행 cmd + / : 주석
01. 도커로 mysql 설치
docker mysql 실행 명령어
docker pull mysql docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql docker ps docker exec -it mysql bash # mysql 콘솔 mysql -u root -p SHOW DATABASE; CREATE DATABASE {name}; DROP DATABASE {name}; USE {name}; // 데이터베이스 변경 SELECT database(); // 현재 사용 데이터베이스 확인
02. 실행계획 보고 쿼리 개선하는 법
- 인덱스만 잘 되도 반은 간다.
- 실행 계획으로 인덱스 잘 되는지 확인할 수 있다.
EXPLAIN SELECT * FROM application WHERE id = 1;
- 빨간색 메시지 나오면 고쳐야하는 쿼리
컬럼 설명 OKAY WARNING select_type 일반 쿼리인지, 서브 쿼리인지, Union 쿼리인지 DEPENDENT
DERIVED
(서브쿼리나 유니온 쿼리일때 표기 되는 키워드. 사용을 지양하자)type 어떤 타입 인덱스 참조했는지 index (인덱스 풀 스캔)
fulltext (Mysql 전문 검색)
all (모든 데이터 풀 스캔) → 테이블 데이터가 적으면 풀 스캔이 좋기도 함key 어떤 인덱스 사용했는가 extra 쿼리를 어떤 식으로 풀었는가 Full scan ~
Impossible ~
No matching ~
Using filesort ~
Using temporary
Using join buffer03. like%는 뒤에 있을때만 사용하자 인덱스 조금이라도 탈 수 있다.
04. In 쿼리 조심하기
- in 쿼리 안에 param 개수가 많아지면 디비가 풀스캔을 한다.
- In 안에 100개 넘어갈 거 같으면 쿼리 쪼개자
05. 외래키 사용하지 않기
- 외래키는 락 경합 유도, 성능을 저하 시킴
- https://martin-son.github.io/Martin-IT-Blog/mysql/foreign%20key/performance/2022/02/28/foreign-key-Performance.html
- https://dba.stackexchange.com/questions/168590/not-using-foreign-key-constraints-in-real-practice-is-it-ok
- https://dataedo.com/blog/why-there-are-no-foreign-keys-in-your-database-referential-integrity-checks
반응형'Spring Boot > DB' 카테고리의 다른 글
[DB] UUID를 고유 값이나 Key로 사용하면 안되는 이유 (0) 2023.06.30 [DB] ACID란? Transaction이란? (0) 2023.06.28 [SQL] Or 와 In 조건 뭐가 더 좋을까? SELECT OR vs IN, which is better performance. (0) 2022.07.15 Flyway로 데이터베이스 마이그레이션 해보자 (이론편) (0) 2022.07.14 [Mybatis 시리즈 2] DataSouce와 DBCP (DataBase Connection Pool) (0) 2022.04.14