목록전체 글 (31)
영우

왜 사용해야 할까요? 데이터베이스에서 특정 텍스트를 검색할 때, 우리는 %LIKE% 구문을 사용할 수 있습니다. 예를 들어, 사용자가 입력한 키워드를 포함하는 모든 레코드를 찾고 싶을 때 이 방법이 유용할 수 있습니다. 하지만 이 방법의 문제점은 테이블 풀 스캔을 피할 수 없다는 것입니다. 데이터가 많아질수록 검색 속도가 점점 느려지고, 서버에 부담을 줄 수 있습니다. 이런 문제를 해결하기 위해 MySQL은 전문검색을 위한 인덱싱 기능을 제공합니다. 이 기능을 사용하면 검색 속도를 크게 향상시킬 수 있습니다. 어떻게 사용해야하는 건가요? MySQL에서 전문검색을 사용하기 위해서는 먼저 FULLTEXT 인덱스를 생성해야 합니다. CREATE TABLE articles ( id INT AUTO_INCREME..

CTE란 무엇인가요? Common Table Expression으로 후속 문에서 사용할 수 있는 임시 테이블입니다. 쉽게 말해 쿼리 출력을 참조하는 다른 쿼리를 작성하기 위해서 쿼리출력 결과를 임시로 저장해 후속 문에서 사용합니다. CTE는 하나의 쿼리 안에서만 사용될 수 있고 쿼리종료시 임시테이블의 정보는 모두 삭제됩니다. 비 재귀적 CTE와 재귀적 CTE로 나뉘고 비 재귀적 CTE는 마치 뷰 처럼 사용되고, 재귀적 CTE는 계층적 정보를 나타내는데 유용하게 사용됩니다. 비 재귀적 쿼리는 무엇인가요? 비 재귀적 쿼리는 WITH 절을 이용해 CTE를 정의합니다. 아래의 예시를 보겠습니다. WITH SalesSummary AS ( SELECT Salesperson, SUM(Amount) AS TotalSa..

SELECT문에는 다양한 절이 들어가게됩니다. 아래의 쿼리가 실행되었을때를 어떤 순서로 처리하는지 알아봅니다. SELECT 이름, SUM(주문개수) FROM 유저 JOIN 주문내역 ON 유저.이름 = 주문내역.이름 WHERE 나이 < 60 GROUP BY 이름 HAVING SUM(주문개수) < 6 ORDER BY 이름 LIMIT 1; FROM + JOIN FROM절은 테이블을 식별합니다. FROM 유저 JOIN절은 테이블을 병합하는데, ON 조건에 명시된대로 유저의 이름과 주문내역의 이름이 같은 경우 하나의 행으로 병합됩니다. JOIN 주문내역 ON 유저.이름 = 주문내역.이름 WHERE where절은 지정된 조건에 따라 테이블의 행을 필터링합니다. 영수는 나이가 60세 이상이므로 테이블에서 삭제합니다...

클러스터링 인덱스가 막연히 PK에 따라 정렬되어 있다는것 정도만 알고있고, 동작에 대해 의문점이 많은 상태였습니다. 제가 오해 && 다시 이해한 내용들을 이 글을 통해 공유하려합니다. 클러스터링 인덱스란 무슨뜻 일까요? 클러스터는 군집 이라는 의미로 포도송이 처럼 비슷한 개체끼리 다닥다닥 붙어있다는 의미입니다. 그렇다면 인덱스는 무슨뜻 일까요? 인덱스는 책 뒷부분에 있는 색인으로 원하는 데이터를 빠르게 찾기위한 도구입니다. 결국 클러스터링 인덱스란 인덱스들이 다닥다닥 붙어있다. 즉 비슷한 인덱스끼리 모여있다는 의미입니다. InnoDB는 클러스터링 인덱스이므로 비슷한 인덱스들이 테이블에 물리적으로 모이고 정렬되어 저장됩니다. 이때 비슷한 인덱스로 PK를 클러스터해 저장하기 때문에 PK를 클러스터링 키라고도..

글을 작성하는 목적 저는 서브쿼리에 대해 쿼리안에 SELECT문이 하나더 있다? 정도만 알고있습니다. 서브쿼리에 대해 누군가 물어보면 자신있게 대답할 수 없을것같아 이 글을 작성하게 되었습니다. 학습의 목표는 다음의 질문들에 대해 대답하기입니다. 하나하나 질문들을 대답하고, 꼬리질문들에 대해 더 생각을 하는 방식으로 진행하려 합니다. 서브쿼리란 무엇인가요? 왜 서브쿼리를 사용하는 것인가요? 서브쿼리는 어떻게 사용하나요? 서브쿼리의 종류는 어떤것이 있나요? 상관서브 쿼리란 무엇인가요? 서브쿼리의 특징은 무엇인가요? 서브쿼리란 무엇인가요? 서브쿼리란 다른 쿼리내에 중첩된 쿼리입니다. 외부쿼리에서 소괄호에 감싸진 SELECT문이 서브쿼리가 됩니다. 외부쿼리란 무엇인가요? 외부쿼리는 메인쿼리로 서브쿼리를 가지고..

왜 글을 쓰나요? RealMySQL 8.0에서 쿼리에 대한 실행계획을 설명할때 항상 EXPLAIN 명령어를 근거로 설명합니다. 이를테면 책에서는 다음과 같이 설명합니다. Extra 칼럼에 “Using index for skip scan”이면 인덱스 스킵 스캔을 활용해 데이터를 조회했다는 것을 의미한다 좋은 설명이지만, EXPLAIN에 대해 잘 알지 못하다보니 흠 그렇군... 그런데 왜 Extra 컬럼에 저런 정보가 들어가지? type, partition, … 등 다른 컬럼은 어떤 정보를 설명하는거지? 라는 궁금증이 항상 있었습니다. 또 앞서 언급한 정보를 모르다보니, 실제 EXPLAIN을 실행시켜도 어떤 실행계획인지 잘 파악하지 못하는 문제가 있었습니다. 그래서 EXPLAIN 명령어에 대해 학습하기로 결..