인덱스를 사용하게 되면 데이터베이스 내의 해당하는 열을 찾는 데에 매우 용이해진다.
인덱스의 경우 조건절에 해당하는 Columns에 대해 생성하면 된다.
CREATE INDEX idx_age
ON customers (age);
CREATE INDEX idx_sex
ON customers (sex)
;
SELECT *
FROM customers
WHERE age>20
AND sex='F'
;
여러 가지 컬럼을 합해서 INDEX를 생성하는 것도 가능하다.
CREATE INDEX idx_name_age
ON customer(name,age);
INSERT/UPDATE/DELETE시 성능에 악영향
특정 인덱스를 가진 컬럼의 데이터가 바뀌면 인덱스 테이블도 수정이 필요하다.
즉, 작업이 두 번 일어나게 된다.
인덱스의 Key와 데이터를 저장할 메모리가 필요하다.
JOIN을 활용하면 여러 개의 테이블에 있는 데이터들을 묶을 수 있다.
하지만 과도한 JOIN 사용은 성능 이슈를 가져온다.
전체 데이터에 비해 결과 값이 적을 때 : NL (nested loop)
결과의 데이터 크기가 많이 차이가 날 때 : SM (sort merge)
크키가 많이 다른 테이블끼리 JOIN을 할 때 : HASH
DISTINCT는 정렬을 거친 뒤 결과를 반환하여 성능을 저하시킨다.
SUBQUERY : SELECT문 안에 다른 SELECT문이 있는 것이다. 복잡한 쿼리를 작성할 때 많이 사용하지만 두 번의 SELECT가 일어나 성능에 저하를 가져온다.
SELECT *
FROM store
WHERE customer_number IN (
SELECT customer_number
FROM customers
WHERE age
BETWEEN 20
AND 30
)