728x90

DB 44

[MySQL] WITH RECURSIVE( 재귀 )

WITH RECURSIVE는 재귀 CTE (Common Table Expression)를 정의할 때 사용하는 MySQL의 기능입니다. 이 기능은 계층적 데이터(예: 조직도, 디렉토리 구조, 그래프 등)를 처리하거나 반복적으로 데이터를 생성해야 할 때 사용됩니다.MySQL에서 WITH RECURSIVE는 8.0 버전 이상에서 지원됩니다.기본 문법WITH RECURSIVE cte_name AS ( -- Anchor 부분: 재귀의 시작점 초기_쿼리 UNION ALL -- Recursive 부분: 반복적으로 실행되는 쿼리 재귀_쿼리)SELECT * FROM cte_name;Anchor 쿼리: 재귀를 시작하는 기본 데이터를 반환합니다.Recursive 쿼리: Anchor 쿼리에서 반환된..

DB 2024.12.16

[ MySQL] WITH 절

MySQL의 WITH 절은 Common Table Expression (CTE)를 정의하는 데 사용됩니다. CTE는 임시 결과 집합으로, 쿼리 내에서 반복적으로 사용하거나 더 가독성이 좋은 쿼리를 작성하는 데 유용합니다.MySQL에서는 버전 8.0 이상에서 WITH 절을 사용할 수 있습니다.기본 문법WITH cte_name AS ( SELECT ... -- 임시 결과를 생성하는 서브쿼리)SELECT ... FROM cte_name;WITH: CTE를 정의하는 시작 부분.cte_name: CTE의 이름.AS: CTE에 대해 서브쿼리를 정의할 때 사용.서브쿼리: CTE에 저장될 데이터 집합.예제 1: 간단한 CTE아래는 직원 테이블에서 특정 데이터를 CTE로 정의하고 활용하는 예입니다.테이블 데이터--..

DB 2024.12.16

[MySQL] 외래키 참조 무결

MySQL에서 외래 키(Foreign Key, FK)를 설정할 때 ON DELETE와 ON UPDATE 옵션은 참조 무결성(Referential Integrity)을 유지하기 위한 동작 방식을 정의합니다.이 옵션들은 부모 테이블의 데이터가 삭제되거나 업데이트될 때, 자식 테이블에서 어떻게 처리할지를 설정합니다.ON DELETE 및 ON UPDATE 옵션 종류1. CASCADE부모 테이블의 행이 삭제되거나 업데이트되면, 해당 외래 키를 참조하는 자식 테이블의 행도 자동으로 삭제되거나 업데이트됩니다.주로 부모-자식 관계에서 데이터가 함께 삭제되거나 변경되어야 할 때 사용합니다.예: 게시글 삭제 시 댓글도 삭제됨.예제 CREATE TABLE parent ( id INT PRIMARY KEY);CREATE..

DB 2024.12.16

[MySQL] 복합 인덱스(Multiple-Column Indexes)

MySQL은 복합 인덱스(composite index)즉 여러 열에 대한 인덱스를 생성할 수 있습니다.하나의 인덱스는 최대 16개의 열로 구성될 수 있습니다.특정 데이터 유형의 경우, 열의 접두사(prefix)만 인덱싱할 수도 있습니다(자세한 내용은 섹션 10.3.5, "열 인덱스"를 참조하세요).복합 인덱스 활용인덱스에 포함된 모든 열을 조건으로 사용하는 쿼리첫 번째 열만 조건으로 사용하는 쿼리첫 번째와 두 번째 열을 조건으로 사용하는 쿼리첫 번째, 두 번째, 세 번째 열을 조건으로 사용하는 쿼리그리고 이러한 순서를 따르는 쿼리들.인덱스 정의에서 열의 순서를 올바르게 지정하면, 단일 복합 인덱스로도 동일한 테이블에 대한 다양한 종류의 쿼리 성능을 개선할 수 있습니다.복합 인덱스는 정렬된 배열로 간주할 ..

DB 2024.12.12

[MySQL] Index 공식 문서 읽어 보기

개요공식 문서를 읽어보며 내용을 정리 해 보자https://dev.mysql.com/doc/refman/8.4/en/optimization-indexes.html MySQL :: MySQL 8.4 Reference Manual :: 10.3 Optimization and Indexes dev.mysql.comDocument1. 최적화 및 인덱스DB 성능 개선하는 가장 좋은 방법 중 하나는 하나 이상의 열에 Index를 생성하는 것Index 항목은 테이블 행으로의 포인터 역할Query가 WHERE 절의 조건에 맞는 행을 빠르게 확인하고 해당 행의 다른 열 값을 검색할 수 있도록 도움MySQL의 모든 데이터 타입은 Index를 생성할 수 있습니다.주의 할점Query에서 사용될 수 있는 모든 열에 인덱스를 생..

DB 2024.12.12

[MySQL] Index 정리

개요정리 하기에 앞서 기준을 잡아야 할거 같아 MySQL문서와 ChatGPT 검색 기반으로 테스트를 할 예정입니다.아래에 Mysql문서 Link와 ChatGPT 정리 내용이 있으며 아래 내용을 토대로 Index에 관하여 테스트 할 예정이다.  MySql 문서https://dev.mysql.com/doc/refman/8.4/en/optimization-indexes.html MySQL :: MySQL 8.4 Reference Manual :: 10.3 Optimization and Indexes dev.mysql.comChatGPT 내용MySQL에서 복합 인덱스를 설정할 때는 쿼리의 실행 계획과 컬럼의 사용 방식에 따라 인덱스 컬럼 순서를 신중히 결정해야 합니다. 특히 SELECT, JOIN, WHERE,..

DB 2024.12.12

[MySql] 성능 개선에 관하여_해결 해 보자_2_경험

https://raconer.tistory.com/entry/MySql-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC%ED%95%B4%EA%B2%B0-%ED%95%B4-%EB%B3%B4%EC%9E%901explain [MySql] 성능 개선에 관하여_해결 해 보자_1_explainExplainSql문 성능 개선에 빠질수 없는 것 들 중 하나인 Explain 쿼리를 한번 확인해 볼려고 한다.컬럼 과 설명id쿼리의 각 부분을 식별하는 고유 번호입니다.서브쿼리나 UNION이 있을 경우 여러 id가 있raconer.tistory.com경험에 따른 Query 튜닝1. Index 설정 확인질문.1예)Mysql 에서 Index 설..

DB 2024.08.22

[MySql] 성능 개선에 관하여_해결 해 보자_1_explain

ExplainSql문 성능 개선에 빠질수 없는 것 들 중 하나인 Explain 쿼리를 한번 확인해 볼려고 한다.컬럼 과 설명id쿼리의 각 부분을 식별하는 고유 번호입니다.서브쿼리나 UNION이 있을 경우 여러 id가 있을 수 있으며, 값이 클수록 실행 순서가 나중입니다. select_type쿼리의 유형을 나타냅니다. 주요 값은 다음과 같습니다:SIMPLE단순 SELECT 쿼리 (서브쿼리 없음)PRIMARY쿼리의 가장 바깥쪽 SELECT 쿼리UNIONUNION 연산자에서 두 번째 이상의 SELECT 쿼리SUBQUERY서브쿼리의 SELECT 쿼리DERIVED서브쿼리의 결과를 임시 테이블로 사용하는 쿼리table쿼리에서 접근하는 테이블의 이름입니다.partitions파티셔닝된 테이블을 사용하는 경우, 참조하는..

DB 2024.08.06

[MySql] 성능 개선에 관하여_고찰

성능 개선그동안 데이터가 적은 회사를 다녔기 때문에 DB 쿼리 성능에 대해 크게 신경을 쓰지 않았던 것 같다. 하지만 데이터가 많아짐에 따라 쿼리 성능 개선은 필수적이며, 서버 관리에 있어 가장 중요한 지식이 되는 것 같다. 예전에는 서비스 부하를 줄이는 방법에 대해 고민했지만, 실제로는 DB 부하를 줄이는 것이 서비스 성능을 눈에 띄게 개선하는 데 더 효과적이라는 것을 알게 되었다. 따라서 DB의 부하를 줄일수록 서비스 성능이 가장 빠르고 효과적으로 개선된다고 생각한다."데이터가 많을때를 경험해 본적없으니...."  앞으로 앞의 글이 많이 보일꺼다. 변명을 하는게 아니다 내가 놓치고 있던거에 대해 뇌에 각인 시키는 것이다. 그동안 "DB 부하는 Redis, Message Queue를 사용해서 부하를 줄..

DB 2024.08.06
728x90