일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이클립스 설치
- 자바의정석
- 객체지향
- 예약어
- 오버라이딩
- 상속
- 비교 연산자
- StringBuffer
- 반복문
- SpringSecurity 로그아웃
- 객체
- spring 게시판 삭제
- SQL 튜닝
- 함수
- 논리 연산자
- 스프링시큐리티 로그아웃
- SQL
- 산술 연산자
- java
- 오버로딩
- 식별자
- SQL튜닝
- 친절한 SQL 튜닝
- 연산자
- @PreAuthorize("isAuthenticated()")
- 배열
- 인텔리제이 Web 애플리케이션
- 친절한 SQL
- join
- SpringSecurity 로그인
- Today
- Total
gi_dor
[MySQL] 스토리지 엔진 본문
프로젝트 배포 당시 MySQL8.xxx 버전을 사용했으며 취준당시
면접 예상 질문으로 5버전과 8 버전대의 차이점에 대한 알아보면서 취업 이후 어느새 까먹어버려서 간단하게
기록 해보려고한다.
스토리지 엔진 ?
데이터베이스 엔진 또는 스토리지 엔진으로 부르며 , 데이터를 조회 , 추가 , 수정 , 삭제 하는 담당
MySQL 에서는 여러 스토리지 엔진을 지원한다고 한다
- InnoDB 엔진
- MyISAM 엔진
- Memory 엔진
- Archive 엔진
- CSV 엔진
- Federated 엔진
최근 프로젝트를 통해 사용했던 8.xx 버전의 사용된 InnoDB 엔진과 그 전 버전인 MyISAM엔진에 대해알아보려고한다
MyISAM
2009.12월 까지 기본엔진으로 MyISAM이 사용 되었다
- 특징
- COMMIT , ROLLBACK 같은 충돌 복구 기능을 가진다
- 트랜잭션을 제공하지 않는다
- 장점
- 전체적인 속도가 InnoDB보다 빠르다
- SELECT 작업 시 속도가 빨라서 읽기 작업에 적합
- 단점
- 데이터 무결성에 대한 보장이 되지 않는다
- Table-level Lock을 사용하기 때문에 갱신 작업 속도가 느리다
주로 데이터 조회가 자주 발생하는 시스템에서 유용하다. 대체로 티스토리 블로그 , 뉴스 , 통계 시스템 같은 읽기 작업이 주된 곳에서 쓰이면 유용하다
InnoDB
5.5 버전 이후부터는 InnoDB 를 기본엔진으로 사용
- 특징
- MyISAM과 마찬가지로 COMMIT , ROLLBACK 충돌 복구 기능을 가진다
- 외부 키를 지원한다 Foreign Key
- Row- Level Lock 을 제공한다.
- 트랜잭션을 제공하며 ACID 속성을 보장한다
- 원자성(Atomicity), 일관성(Consistency), 격리(Isolation) 지속성(Durability)
- 장점
- MyISAM 보다 COMMIT , ROLLBACK 충돌 복구 기능이 뛰어나다
- Row Level Lock을 사용하기에 갱신 작업 속도가 빠르다
- 단점
- 시스템의 자원을 많이 사용한다
전자상거래 eCommerce 같이 구매,결제,재고파악등 다양한 트랜잭션이 발생하는 환경
금융서비스 , 커뮤니티사이트 ( 작성 , 댓글 등 읽기 쓰기 수정 작업이 혼합된 환경 )에 사용 하기 적합하다
Table Level Lock
- 테이블에 대한 잠금방식을 의미
- 테이블 전체를 잠그며 , 어떤 작업이 테이블에 있는 데이터에 접근할 때 , 모든 테이블 전체가 잠긴다
- 하나의 쓰기 작업이 진행중이라면 다른 모든 읽기와 쓰기에 대한 작업이 대기해야한다.
- 커뮤니티같은 익명의 여러 사람들이 글을 작성하거나 읽을시 문제가 생긴다
Row Level Lock
- 특정 행만 잠근다 , 특정 행만 잠그기에 다른행은 여전히 접근이 가능하다
- A라는 사용자가 하나의 행을 수정 할 때 , A 사용자는 다른 행을 잠글 필요가 없다
- 여러 사용자가 동시에 서로 다른 행을 수정하거나 읽을 수 있다
User 테이블이 있고 user_id 와 user_name 컬럼이 있다
여러 사용자가 동시에 회원 정보인 user_name을 수정한다면
MyISAM 같은 경우 user_id = 1 인 사용자가 user_name을 수정하는동안 다른 사용자는 테이블에서 읽기와 쓰기 작업을 할수 없다
InnoDM 경우 user_id = 1 인 사용자가 user_name을 수정하는 동안 다른 사용자인 user_id = 2 인 사용자는
user_name을 수정 할 수 있다.
간단하게 두 엔진의 차이점
- FK 지원유무
- 트랜잭션 지원유무
- Table Lock 과 Row Lock
SELECT
d.department_name,
e.name AS manager_name
FROM departments d , employees
WHERE d.manager_id = e.id;
- JOIN 은 외래 키 제약이 없더라도 두 테이블의 관련 데이터를 조회할 수 있다.
- 외래 키가 설정된 경우, 데이터의 무결성을 유지하면서 JOIN 연산을 수행
- 쿼리 작성 방법은 외래 키가 있는 경우와 없는 경우 동일하지만, 외래 키는 데이터의 정확성과 일관성을 보장
데이터 무결성은 DB에서 데이터를 정확하고 일관되게 유지하는 것이다
https://velog.io/@mooh2jj/Mysql-InnoDB-vs-MyISAM
'DataBase' 카테고리의 다른 글
[MySQL] RDS DB 이중화 읽기전용 + CQRS (6) | 2024.08.19 |
---|---|
트랜잭션(Trasaction) 이란 ? (0) | 2024.08.19 |
[MySQL] MySQL 프로파일링 - 인덱스 SELECT 성능 비교 (0) | 2024.05.08 |
SQL ) 테이블 생성시 Deleted 컬럼이 필요 할까? (0) | 2023.12.13 |
DB 기본 (2) | 2023.12.04 |