DB (7) 썸네일형 리스트형 NL조인 기반 인덱스 설계 https://product.kyobobook.co.kr/detail/S000001975837 친절한 SQL 튜닝 | 조시형 - 교보문고친절한 SQL 튜닝 | 책 제목은 필자가 애청하는 라디오 프로그램 ‘손에 잡히는 경제’ 중 ‘친절한 경제’라는 코너에서 착안했다. 어려운 경제 이슈를 일반인 눈높이에 맞게 풀어서 설명해 주는product.kyobobook.co.kr 요즘 SQL 튜닝에 대해 관심이 생겨 관련된 내용을 공부하는 중이다.그러던 중 '친절한 SQL 튜닝' 이라는 책에서 아래와 같은 내용을보게 되었다. (책 내용 중...)개발 업무를 하다 보면 다음과 같이 인덱스 생성을 요청받는 경우가 종종 있다. PRA_HST_STC_N1 : SALE_ORG_ID + STRD_GRP_ID + STRD_ID.. 같은 SELECT인데 결과가 0건(MyBatis) 들어가며 최근에 SpringBoot + MyBatis로 구성된 서버 개발 중 동료가 예상치 못한 문제를 겪은 것을 보았다.반복문 내에서 똑같은 SELECT 쿼리를 여러 번 호출했는데, 첫 번째 호출에서는 결과가 정상적으로 나왔지만, 이후 호출에서는 결과가 0건으로 나타난 문제가 바로 그것이다.처음에는 쿼리 문법이나 전달된 파라미터가 잘못됐는지 의심했으나 문제가 동일하게 발생했다. 그러다가 MyBatis의 캐시 설정 때문이라는 것을 알게 되었다.나도 나중에 같은 일을 겪게 될 수도 있을 것이라는 생각이 들어서 이번 기회를 통해 아래와 같은 내용을 정리해 보는 시간을 갖고자 한다.MyBatis의 캐시 종류와 내부 동작 방식useCache, flushCache 옵션의 정확한 역할과 사용법캐시 관련 옵션을 설정.. Index Skip Scan과 In-List 튜닝 인덱스 탐색의 중요성 보통 DB에서 조회 작업을 하는 경우 인덱스를 잘 사용하는지 여부에 따라 조회 쿼리 성능이 크게 향상될 수 있다.그렇기 때문에 같은 결과를 내는 쿼리라도 WHERE 절의 조건을 적절하게 사용하여 인덱스 사용 및 인덱스 탐색 방식을 다르게 하여 성능이 잘 나오게 할 수도 있으며, 반대로 성능이 나오지 않을 수도 있다.이 글에서 간략하게 Index Skip Scan과 Index Range Scan에 대해 정리해보고, 같은 인덱스를 사용하더라도 WHERE 절의 조건에 따라 옵티마이저가 어떻게 실행계획을 선택하는지 정리해 보려고 한다. INDEX SKIP SCAN이란?INDEX SKIP SCAN 개념INDEX SKIP SCAN은 인덱스의 선두 컬럼이 WHERE 조건에 없을 때도, 후행 .. My SQL 최적화 가이드 - 1. 최적화 https://dev.mysql.com/doc/refman/8.0/en/optimize-overview.html MySQL :: MySQL 8.0 Reference Manual :: 10.1 Optimization Overview10.1 Optimization Overview Database performance depends on several factors at the database level, such as tables, queries, and configuration settings. These software constructs result in CPU and I/O operations at the hardware level, which you must minimizdev.mysql.com 서.. MySQL) OPTIMIZE TABLE Statement 조회쿼리 실행시 40초가 넘는 상황이 생겼다. 쿼리튜닝을 시도하며 끙끙대다가, 아주 간단한 방법으로 해결되었다. OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... OPTIMIZE TABLE 을 실행한 테이블들은 데이터 이관을 위해 행들이 여러번 지워졌다 삭제되거나, 잦은 변형이 가해진 테이블들이였다. 그래서 그런지 너무 드라마틱하게 성능이 개선되었고(40초 이상 > 0.3초 이하), 사실 그동안 OPTIMIZE TABLE은 쿼리성능개선을 위해 생각하던 옵션이 아니였다. 그래서 이번기회에 OPTIMIZE TABLE에 대해 정리해보려고 한다. https://dev.mysql.com/doc/refman/9.0/en/optimize.. 쿼리 성능 최적화(EXISTS, JOIN) 튜닝해야할 쿼리 최근 아래와 비슷한 쿼리의 성능이 너무 좋지 않아 Time out이 발생하여, 튜닝을 하게 되었다.-- 변경 전SELECT SUM(DS.CNT)FROM ( SELECT COUNT(1) AS CNT FROM USER_MAILBOX UM INNER JOIN USER_MAIL M ON UM.MAILBOX_ID = M.MAILBOX_ID INNER JOIN USER_MAIL_MESSAGE MSG ON M.MSG_ID = MSG.MSG_ID WHERE 1 = 1 AND EXISTS ( SELECT 'Y' FROM USER_MAIL_RECIPIENT R WHERE R.MSG_ID = M.MSG_ID AND M.MAIL.. 테이블 비정규화를 통한 가독성 향상과 성능 향상 일반적으로 테이블을 생성할 때는 정규화를 한다. 중복된 데이터를 제거하여 저장 공간을 최소화 하고 데이터의 일관성을 유지하기 위해서이다. 또한 데이터 업데이트시에도 하나의 테이블에서만 하면 되므로 작업효율적이기 때문이다. 하지만 실무를 진행하다 보면 많은 테이블들이 생성되어 많은 테이블들과의 조인이 일어나 성능이 저하되는 경우도 있고 쿼리 작성 및 가독성이 떨어지는 경우도 생긴다. 이럴경우 뷰 테이블 생성을 고려하기도 한다. 많은 조인이 걸려있는 경우 뷰 테이블을 이용하여 쿼리의 가독성을 향상시킬 수 있기 때문이다. 하지만 조회성능 향상에 대해서는 상황에 따라 다를 수 있다고 알고 있다. 그래서 성능 향상 및 가독성을 위해 비정규화를 고려하는 경우가 생긴다. 최근 고객사에서 조회 속도에 대한 개선요청건이.. 이전 1 다음