본문 바로가기

데이터베이스(DA, AA, TA)

(146)
[Real MySQL] 실행 계획 분석 시 주의사항 지금까지 MySQL에서 쿼리를 처리하는 방식이나 실행 계획에 대해 살펴보겠습니다. 쿼리의 실행 계획만으로도 상당히 내용이 많아서 모두 기억하자면 상당히 힘들 것입니다. 그래서 여기서는 쿼리의 실행 계획을 확인할 때 각 칼럼에 표시되는 값 중에서 특별히 주의해서 확인해야 하는 항목만 간략하게 정리했습니다. Select_type 칼럼의 주의 대상 DERIVEDDERIVED는 FROM 절에 사용된 서브 쿼리로부터 발생한 임시 테이블을 의미합니다. 임시 테이블은 메모리에 저장될 수도 있고 디스크에 저장될 수도 있습니다. 일반적으로 메모리에 저장하는 경우에는 크게 성능에 영향을 미치지 않지만, 데이터의 크기가 커서 임시 테이블을 디스크에 저장하면 성능이 떨어집니다. UNCACHEABLE SUBQUERY쿼리의 FR..
[Real MySQL] 테이블 조인 보호되어 있는 글입니다.
[MyBatis] 샾(#), 달러($)의 차이 SELECT * FROM TEST WHERE testId = #{testId} MyBatis에서 위와 같은 쿼리문을 실행하게 되면 데이터베이스에서는 아래 쿼리문에 대한 의미, 구문 분석 및 파싱 작업을 진행하게 됩니다. SELECT * FROM TEST WHERE testId = ? 만약 testId에 1 값이 바인드 되게 되면 database에서는 이미 파싱되어 있는 쿼리문을 재활용하게 되기에 위의 작업들을 줄일 수 있습니다. 단, 데이터베이스 옵티마이저에 대한 수행 계획은 항상 동일하다라는 것이 단점입니다. 수행 계획에 따른 데이터 추출은 데이터의 분포도에 영향을 받게 되는데 만약 1이라는 값이 TEST에 4개 존재하고, 2라는 값이 1000개 존재한다고 했을 때, 1을 추출할 때에는 인덱스 스캔이 ..
[Real MySQL] MySQL의 주요 처리 방식 보호되어 있는 글입니다.
[Real MySQL] MySQL 실행 계획 보호되어 있는 글입니다.