인덱스 2

MySQL eq_range_index_dive_limit 를 활용한 쿼리 수행시간 개선 및 실무에서 발생할 수 있는 연관된 문제

배경 의도치 않게 쿼리 수행시간이 증가하거나 이슈가 발생하는 부분 중 하나인 쉽게 발생하지만 원인파악이 쉽지 않은 부분에 대한 내용입니다. IN절로 인한 쿼리 수행시간이 증가하는 것에 따른 원인파악과 해결방법에 대해서 다룹니다. IN절에 들어가는 개수에 따라 쿼리 수행시간이 급격하게 나빠지는 경우가 존재하기 때문입니다. 설정값 eq_range_index_dive_limit eq_range_index_dive_limit IN 절에 길게 중첩되었을때 쿼리 속도를 높이는데 사용되는 값이다. 이 값 이상이라면 옵티마이저는 인덱스 다이빙을 수행하지 않고 기존 인덱스 통계를 사용한다. 0으로 설정하면 항상 인덱스 다이빙을 수행한다. 아래와 같은 쿼리가 있을 때, col_name IN(val1, ..., valN) ..

MySQL의 Between 쿼리 개선하기

본 글은 RealMySQL 도서를 스터디하며 읽은 내용 + 실습한 내용입니다. Between을 써서 쿼리를 작성하는데 있어서 비효율적으로 탈 수 있는 쿼리를 개선해 볼 수 있는 내용을 다루었습니다. 테스트 데이터 세팅 실습을 하려면 실제 쿼리를 수행해보고 실행계획을 확인할 수 있는 환경이 필요하다. 먼저 테이블은 컬럼을 간단히 만들었다. (id, position, no) 3개의 컬럼이 있는데 position은 직원의 직책이고 no는 사번이라고 생각하면 된다. 인덱스는 (position + no)에 걸어놓았다. 테스트를 위해서 데이터세팅을 해보았다. 아래와 같이 대충 insert가 되도록 하였다. @Component public class Runner implements CommandLineRunner {..

반응형