반응형
반응형
데이터베이스 설계자에게 있어 "가독성"과 "성능"은 언제나 트레이드오프(Trade-off) 관계에 있습니다. MySQL 8.0 이후 우리는 복잡한 쿼리를 처리하기 위해 VIEW와 WITH 절(CTE)이라는 비슷한 두개의 방식을 알수 있습니다.이 두가지의 기능은 단순히 "문법이 다르다"는 간단한 수준을 넘어, 이번 포스팅에서는 메모리 구조, 옵티마이저의 처리 방식, 그리고 실무 아키텍처 관점에서 두 기능을 비교해 보겠습니다.1. 근본적인 아키텍처의 차이VIEW: 영구적인 논리 레이어 (Permanent Logical Layer)VIEW는 데이터베이스 카탈로그에 저장되는 객체(Object)입니다.컴파일 시점: VIEW를 생성할 때 MySQL은 구문을 분석하고 권한을 체크합니다.생명 주기: DROP VIEW를..
지난 포스팅에서 데이터베이스에 영구적으로 저장되는 가상 테이블인 VIEW에 대해 알아보았습니다. 하지만 모든 가상 테이블이 영구적일 필요는 없습니다. 특정 쿼리 안에서만 잠시 사용하고 버려질 '일회성' 가상 테이블이 필요할 때, 우리는 WITH 절(Common Table Expression, CTE)을 사용합니다.MySQL 8.0부터 도입된 이 강력한 기능을 통해 지저분한 서브쿼리를 어떻게 깔끔하게 정리할 수 있는지 분석해 보겠습니다.1. WITH 절(CTE)이란 무엇인가?CTE(Common Table Expression)는 복잡한 쿼리문 내에서 임시적으로 정의하여 사용하는 결과 집합입니다.일시성: 쿼리가 실행되는 동안에만 존재하며, 실행이 끝나면 메모리에서 사라집니다.가독성: 쿼리 상단에 로직을 정의하..
데이터베이스를 설계하고 쿼리를 작성하다 보면, 수많은 테이블을 조인(Join)하거나 복잡한 계산식을 반복해서 사용해야 하는 상황에 직면합니다. 이때 가장 먼저 떠올릴 수 있는 효율적인 도구가 바로 VIEW(뷰)입니다. 오늘은 MySQL의 핵심 기능 중 하나인 VIEW의 개념부터 실무 활용 전략까지 상세히 분석해 보겠습니다.1. VIEW란 무엇인가?VIEW는 한마디로 "저장된 SELECT 문"입니다. 사용자에게는 일반 테이블과 똑같이 보이지만, 실제로 데이터를 물리적으로 저장하고 있지는 않습니다. 사용자가 VIEW에 접근할 때마다 정의된 쿼리가 실행되어 결과를 보여주는 가상 테이블(Virtual Table)입니다.2. VIEW를 사용하는 이유?단순히 "쿼리가 짧아져서"라는 이유만으로 VIEW를 사용하는 것..
MY SQL의 쿼리 성능을 최적화 하려면 매우 많은 부분을 생각해야합니다. 단순히 인덱싱만 한다고 해서 해결되는게 아닐경우도 있는데요. 그런 최적화를 위해서 기본적으로 SELECT 문의 성능을 확인하는 EXPLAIN을 사용해야합니다.우선은 EXPAIN의 기초는 나중에하고 일단 EXPLAIN을 하게되면 나오는 스키마 중에 성능, 속도를 가장 밀접하게 알려주는 TYPE의 종류에 대해 알아보겠습니다.물론 TPYE 뿐만아니라 다른 컬럼과 무조건 종합적으로 분석해야 합니다.다른 컬럼들에 대한 설명은 추후에하고 우선은 TYPE 먼저 분석하겠습니다.우선 TYPE은 MYSQL데이터 베이스가 해당 테이블의 레코드에 어떤 방식으로 접근 하였는가? 이것을 나타내는 컬럼입니다. 즉 해당 데이터를 어떠한 방식으로 검색했는지 조..
최근 작업하다가 MYSQL에서 INNODB RECORD LOCK이 생기는 현상이 있어서 이를 해결 했던 방법을 적으려 합니다한행의 INDEX를 기준으로 LOCK을 걸어서 해당 행에 SELECT , UPDATE, DELETE 를 하지 못하도록 막아놓은 처리가 RECORD LOCK입니다.이때 LOCK 이 걸리게되면 해당 트랜잭션이 처리가 될때까지 다른 세션에서는 해당 레코드에 어떠한 쿼리를 실행해도 대기 상태에 걸리게 되는데요 이를 강제적으로 처리하는게 해당 LOCK을 건 트랜잭션을 찾아서 KILL 해버리는 방법입니다MY SQL 8.0버젼 부터는 performance_schema.data_locks 에 lock에 관한 정보가 조회되어 나옵니다. SELECT * FROM performance_schem..