본문 바로가기

Computer Science/데이터베이스3

[MySQL 8.0] 인덱스 조회 최적화 기능, Skip Scan에 대해 살펴보자 Real MySQL을 읽다가 재미있는 내용을 발견해서 한 번 정리해봤습니다. 인덱스의 핵심은 값이 정렬되어 있다는 것입니다. 다중 컬럼 인덱스는 첫 번째 칼럼에 의존하여 두 번째 칼럼이 정렬되기 때문에 칼럼의 순서가 매우 중요합니다. 예를 들어 mysql> ALTER TABLE employees ADD INDEX ix_gender_birthdate (gender, birth_date); 위와 같은 다중 컬럼 인덱스가 생성되어 있다면 birth_date 칼럼은 gender에 의존적입니다. 따라서 birth_date만을 조건으로 조회를 할 경우 인덱스를 활용하지 못합니다. 그런데 MySQL 8.0부터 skip scan 최적화 기능이 도입되면서, birth_date 조건만으로 인덱스를 활용할 수 있게 되었습니.. 2022. 6. 23.
AUTO_INCREMENT는 ROLLBACK되지 않는다 데이터 접근 객체 테스트 작성 중 다음과 같은 문제를 겪었습니다. @SpringBootTest @Transactional @ActiveProfiles("test") class ChessGameDAOTest { @Autowired private ChessGameDAO dao; ... @Test @DisplayName("체스 게임방을 ID로 불러온다") void findChessGameById() { // arrange String gameName = "test1"; dao.addGame(new GameCreationDTO(gameName, "123")); // act ChessGame findGame = dao.findGameById(1); // assert assertThat(findGame.getNam.. 2022. 4. 27.
[DB] 트랜잭션 (Transaction) 트랜잭션이란 트랜잭션이란 데이터베이스의 논리적인 작업의 단위를 말한다. 하나의 트랜잭션은 여러 쿼리(연산)로 구성되는데, 데이터베이스의 일관성을 유지하기 위해 트랜잭션은 아래 네 가지 특성을 가지며 이를 흔히 ACID라고 부른다. Atomicity : 하나의 트랜잭션 안에 있는 쿼리는 모두 반영되거나(커밋) 모두 반영되지 않아야(롤백) 한다.(All or nothing) Consistency: 데이터가 트랜잭션 실행 이후에도 일관성을 유지해야한다. Isolation: 트랜잭션은 서로 격리되어야 한다. 즉 하나의 트랜잭션이 다른 트랜잭션의 결과에 영향을 미쳐서는 안된다. 가장 좋은 방법은 모든 트랜잭션을 순차적으로 실행하는 것이다. 그러나 성능 향상을 위해서는 트랜잭션이 병렬적으로 수행될 필요가 있는데, .. 2021. 8. 24.