short query , long query 란 무엇인가? sql최적화 팁 - 수정중
첫 번째 단계는 쿼리가 짧은 쿼리인지 긴 쿼리인지 식별하는 것입니다. 이 장에서는 짧은 쿼리를 최적화하는 데 중점을 둡니다. 짧은 쿼리를 식별하는 방법, 짧은 쿼리에 사용할 최적화 기술, 이 쿼리 유형에 인덱스가 매우 중요한 이유를 배우게 됩니다. 또한 PostgreSQL에서 사용할 수 있는 다양한 유형의 인덱스와 각 인덱스 유형을 사용할 수 있는 경우에 대해서도 설명합니다. 이 챕터를 진행하기 전에 몇 가지 추가 인덱스를 만들어 보겠습니다
SELECT d.airport_code AS departure_airport,
a.airport_code AS arrival_airport
FROM airport a,
airport d
Long query 1-1
SELECT f.flight_no,
f.scheduled_departure,
boarding_time,
p.last_name,
p.first_name,
bp.update_ts as pass_issued,
ff.level
FROM flight f
JOIN booking_leg bl ON bl.flight_id = f.flight_id
JOIN passenger p ON p.booking_id=bl.booking_id
JOIN account a on a.account_id =p.account_id
JOIN boarding_pass bp on bp.passenger_id=p.passenger_id
LEFT OUTER JOIN frequent_flyer ff on ff.frequent_flyer_id=a.frequent_
flyer_id
WHERE f.departure_airport = 'JFK'
AND f.arrival_airport = 'ORD'
AND f.scheduled_departure BETWEEN
'2020-08-05' AND '2020-08-07'
Short Query 1-2
SELECT avg(flight_length),
avg (passengers)
FROM (SELECT flight_no,
scheduled_arrival -scheduled_departure AS flight_length,
count(passenger_id) passengers
FROM flight f
JOIN booking_leg bl ON bl.flight_id = f.flight_id
JOIN passenger p ON p.booking_id=bl.booking_id
GROUP BY 1,2) a
Long Query 1-3
Short Query
쿼리 질의에 대한 결과를 얻기위해 데이터를 찾는 횟수를 최소화할때 짧은 쿼리라 한다.
(1-2) 쿼리에서 flight 로우수가 20만개라고 치면 현 flight에서 20만개 약 200,000개의 항공편 중 단 몇 개의 항공편에서 얻은 데이터가 필요하기 때문이다.
Long Query
쿼리 질의에 대한 결과를 얻기 위해 데이터를 찾는 횟수가 최대일경우 롱 쿼리라 한다.
(1-1) 결과를 얻으려면 airport 테이블의 모든 행이 필요하기 때문이다
즉, 최적화 목표는 가능한 한 빨리 결과 집합의 크기를 줄이는 것입니다. 쿼리 실행의 첫 번째 단계에서 가장 제한적인 선택 기준을 적용하면 추가 정렬, 그룹화 및 조인 비용이 적게 듭니다. 실행 계획을 살펴보면 큰 테이블의 테이블 스캔이 없어야 합니다. 작은 테이블의 경우 3장의 그림 2-3에 표시된 것처럼 전체 스캔이 계속 작동할 수 있습니다
외래키
외래 키는 참조 무결성 제약 조건입니다. 자식 테이블(즉, 외래 키 제약 조건이 있는 테이블)의 null이 아닌 각 값에 대해 부모 테이블에 일치하는 고유 값이 있음을 보장합니다
인덱스 생성 판단
인덱스는 인덱스를 생성할 칼럼에 있는 값에 중복된 데이터가 최소로 있을경우 인덱스를 생성한다.
예를들어 시퀀스 -> 하당 시퀀스 번호는 고유한값이므로 그자체로 로우를 식별가능하니 생성한다.
칼럼 값이 2개의 값으로만 되어있을경우 0 또는 1, 이와 같은 경우에는 인덱스를 생성해도 별다른 효과를 발휘하지 못한다.