커버링 인덱스란? 커버링 인덱스란 쿼리에 필요한 모든 칼럼을 포함하고 있는 인덱스를 의미한다. 예를 들어 책의 맨 뒤의 원하는 키워드에서 찾은 후 (1단계) 다시 그 페이지로 넘어가서 내용을 읽는(2단계)가 아닌 1단계에서 처리를 한다.커버링 인덱스 적용 전 아래는 price만 인덱스가 걸려 있고, 그 상태에서 item_id, price, item_name을 SELECT 하는 쿼리를 실행했다고 가정하였다.SELECT item_id, price, item_name FROM items WHERE price BETWEEN 50000 AND100000; 위의 쿼리를 분석해보면 인덱스에서 price 조건에 맞는 행의 item_id 5개를 찾았지만, item_name도 추가로 조회하기 때문에 원본 테이블에 5번 접..
인덱스란 데이터베이스에서의 인덱스는 데이터를 빠르게 찾기 위한 색인이다. 일상 생활에서 책 내용을 찾을려면 처음부터 끝까지 모두 확인하는게 아닌 책 뒤의 특정 단어(색인)를 통해 바로 찾을 수 있다. 데이터베이스의 인덱스도 이와 동일한 개념이다.인덱스 동작 원리 대부분의 관계형 데이터베이스에서 인덱스는 B+ Tree 구조를 사용하며, 원본 테이블과는 별개의 특수한 자료 구조다. 인덱스는 지정된 컬럼의 값과, 해당 값을 가진 실제 데이터 행의 위치(예: 주소값, 포인터,pk 등)를 한 쌍으로 지정하고, 인덱스 내부의 데이터는 항상 정렬된 상태를 유지한다. (아래는 items 테이블과 items 테이블의 item_name으로 인덱스를 나타낸 그림이다.) 앞서 인덱스는 B+ Tree 구조를 가지고 있다고 했..
뷰(View)이란? 뷰는 가상의 테이블이다. 즉 데이터를 가지고 있지 않는다. 뷰는 데이터를 저장하는 테이블이 아니고, 복잡한 쿼리문 자체를 저장하고 있다. 뷰(View)를 사용하는 이유편리성: 복잡한 쿼리를 단순화하여 쉽게 재사용 가능.보안성: 원본 테이블에 대한 접근 권한을 주지 않고, 뷰를 통해서만 제한된 데이터에 접근하도록 허용할 수 있다.논리적 독립성: 원본 테이블의 구조가 일부 변경 되더라도, 뷰의 정의만 수정하면 뷰를 사용하는 프로그램의 코드는 바꿀 필요가 없을 수도 있다.뷰 생성CREATE VIEW 뷰이름 AS SELECT 쿼리문;DROP VIEW IF EXISTS v_category_order_status; -- 만약 뷰가 이미 존재한다면 제거CREATE VIEW v_category_or..
SQL 실행 순서 SQL 실행 순서는 우리가 SQL을 작성하는 순서와 실제 SQL이 쿼리를 처리하는 순서가 다르다. SQL 쿼리의 논리적 순서FROM: 가장 먼저 실행. 어떤 테이블에 데이터를 가져올지 결정WHERE: FROM에서 가져온 테이블의 개별 행을 필터링한다.GROUP BY: WHERE 절의 필터링을 통과한 행들을 기준으로 그룹을 형성한다.HAVING: GROUP BY를 통해 만들어진 그룹들을 필터링한다.SELECT: 위의 조건을 통과한 행 또는 그룹들에 대해 보고자 하는 칼럼을 선택하고, 집계 함수(SUM, AVG 등등), 별칭(AS) 등이 이 단계에서 이루어진다.ORDER BY: SELECT 절에서 선택된 최종 결과 후보들을 지정된 순서로 정렬한다. (SELECT가 ORDER BY 보다 먼저..