SELECT
col1,
col2,
FROM
Table
--
SELECT
col1
, col2
# , col3
FROM
Table
a.각 예약어 마다
b.각 컬럼 마다
c.서브쿼리
a.키워드와 식별자 사이
b.연산자 앞,뒤로
#WHERE절 조인(구식)
SELECT users.id, users.name, orders.order_date
FROM users, orders
WHERE users.id = orders.user_id
AND users.status = 'active'
AND orders.order_date > '2023-01-01';
--
# JOIN/ANSI-92 구문
SELECT users.id, users.name, orders.order_date
FROM users
JOIN orders ON users.id = orders.user_id
WHERE users.status = 'active'
AND orders.order_date > '2023-01-01';
쿼리가 올바른 데이터를 반환하는지 확인 필요
자주 실행되는 쿼리 또는 많은 행을 처리하는 경우에만 최적화 우선
쿼리의 정확성과 가독성을 먼저 고려한 후 성능 최적화 적용
데이터베이스가 검색해야 하는 값의 수를 최소화
SQL의 선언적 특성을 활용하여 필요한 데이터만 지정
도구를 사용하여 SQL 쿼리를 정확하게 작성
메타데이터를 통해 데이터 구조와 내용 파악
샘플 데이터를 통해 특정 열의 값을 확인
열과 테이블의 메타데이터를 연구하는 과정 필요
SELECT *로 테이블 값을 파악하고 LIMIT를 사용하여 결과 제한
필요한 최소한의 열로 범위 축소 후 필터 적용
FROM(JOIN) > WHERE > GROUP BY > HAVING > SELECT > UNION > ORDER BY
코드에 주석을 추가하여 이유를 설명하는 것의 중요성
ON 키워드를 사용하여 명시적으로 테이블을 조인
여러 테이블을 쿼리할 때 별칭을 사용하여 가독성 향상 필요성
HAVING 절 전에 WHERE 절로 불필요한 행 필터링
WHERE 절에서 열에 함수 사용을 피함으로써 성능 최적화 필요
문자열 결합 대신 다중 조건을 사용하는 방법
고유 값이 많은 열부터 그룹화하여 성능 향상
데이터 집계 시 GROUP BY 사용
내림차순으로 그룹화하는 방법
HAVING 절을 집계된 데이터 필터링에만 사용
집계되기 전 데이터 필터링에는 WHERE 절 사용
필터링 기준을 명확히 할 필요성
필요한 열만 선택하여 효율성 향상
쿼리 탐색 시 * 사용 가능하나 결과 제한 필요성
명확한 열 선택을 통한 성능 최적화
중복이 문제가 되지 않는 경우 UNION ALL 사용
UNION ALL이 중복 제거를 하지 않아 더 효율적임
데이터를 병합하는 방법
가능한 한 정렬을 피하여 성능 최적화
서브쿼리에서 불필요한 정렬 피하기
결과 정렬의 비용을 최소화하는 방법
적절한 인덱스 추가로 쿼리 성능 향상
외래 키 열과 자주 쿼리되는 열에 인덱스 추가
부분 인덱스와 복합 인덱스 사용
EXPLAIN을 통해 쿼리 계획 분석
병목 지점을 찾아 성능 최적화
쿼리 계획을 비교하여 효율성 평가
WITH 절을 사용하여 논리 캡슐화
복잡한 쿼리를 구조화하여 가독성 향상
JSON 필드와 같은 복잡한 데이터 처리