본문 바로가기
DB관련

Firebird SQL 튜닝 자동화 체크 규칙 리스트

by creemcheese 2025. 11. 28.

Firebird SQL 튜닝 자동화 체크 규칙 리스트

(자동화 시스템 · 정적 분석기 · SQL 리뷰 도구 적용 가능)

총 50개 규칙
카테고리 10개
각 규칙별로 “문제 유형 / 탐지 조건 / 자동 수정 방안” 포함


1️⃣ 인덱스 관련 규칙

✔ RULE F-INDEX-01

문제: WHERE 절 컬럼에 인덱스 없음
탐지 조건:

  • WHERE col = ?
  • 테이블에 해당 컬럼 인덱스 없음
    자동 수정:
 
CREATE INDEX idx_{table}_{column} ON {table}({column});

✔ RULE F-INDEX-02

문제: JOIN 컬럼 인덱스 없음
탐지 조건:

  • JOIN A.col = B.col
  • A.col 또는 B.col 인덱스 없음
    자동 수정:
 
CREATE INDEX idx_{table}_{column} ON {table}({column});

✔ RULE F-INDEX-03

문제: LIKE '%keyword%' 전체 스캔 유발
탐지 조건:
LIKE '%...%' 패턴
자동 수정 제안:

  • Generated Column + Index
 
ALTER TABLE t ADD col_u GENERATED ALWAYS AS (UPPER(col)); CREATE INDEX idx_t_col_u ON t(col_u);

2️⃣ JOIN 최적화 규칙

✔ RULE F-JOIN-01

문제: FULL JOIN 사용
탐지 조건: FULL JOIN 키워드
자동 변환: LEFT JOIN + RIGHT JOIN UNION ALL 방식
(제가 Firebird 변환에서 항상 사용하는 패턴)


✔ RULE F-JOIN-02

문제: 다중 LEFT JOIN + 큰 테이블 연결 → 성능 저하
탐지 조건:

  • LEFT JOIN 3개 이상
  • 테이블 건수 1M 이상
    자동 대안:
  • 임시 테이블 / 분리 쿼리 / 서브쿼리 대체

✔ RULE F-JOIN-03

문제: JOIN 조건에 함수 사용
예: ON UPPER(A.name) = B.name
탐지 조건: 함수(Expression) 포함
자동 수정: Generated Column 활용


3️⃣ SELECT 성능 규칙

✔ RULE F-SELECT-01

문제: SELECT * 사용
조치: 필요한 컬럼만 추출하도록 권장 리스트 생성


✔ RULE F-SELECT-02

문제: SELECT + ORDER BY 함수
예: ORDER BY UPPER(name)
조치: Generated Column + 인덱스 활용


✔ RULE F-SELECT-03

문제: DISTINCT 불필요 사용
탐지 조건:

  • DISTINCT + 이미 UNIQUE 인덱스 존재
    자동 제안: DISTINCT 제거 가능

4️⃣ WHERE 절 규칙

✔ RULE F-WHERE-01

문제: WHERE 절에 OR 다수 포함
조치: UNION ALL로 분해 가능 여부 분석


✔ RULE F-WHERE-02

문제: WHERE 조건에 함수 사용
예: WHERE UPPER(name) = 'A'
자동 해결: 생성 컬럼 + 인덱스


✔ RULE F-WHERE-03

문제: CASE WHEN 포함된 WHERE
→ Firebird 옵티마이저가 인덱스 활용 불능
자동 해결: CASE 분해 + 독립 WHERE 조건


5️⃣ GROUP BY / ORDER BY 규칙

✔ RULE F-GROUP-01

문제: GROUP BY에 함수/표현식 포함
대안: 계산 컬럼(Core Column) 적용


✔ RULE F-ORDER-01

문제: ORDER BY 다중 컬럼 + 인덱스 불일치
조치: 복합 인덱스 생성 자동 제안


6️⃣ 서브쿼리 규칙

✔ RULE F-SUBQ-01

문제: 상관 서브쿼리(Correlated) 존재
탐지 조건: SELECT 내부에서 외부 테이블 참조
자동 수정: JOIN 방식으로 변환


✔ RULE F-SUBQ-02

문제: NOT IN 사용
→ NULL 포함 시 인덱스 무력화
조치: NOT EXISTS 변환


7️⃣ 트랜잭션 & 업데이트 규칙

✔ RULE F-TR-01

문제: 대량 UPDATE/DELETE 단일 트랜잭션
자동 대안: ROWS n 옵션 + EXECUTE BLOCK 생성


✔ RULE F-TR-02

문제: Merge 없이 다단계 UPDATE 수행
대안: MERGE로 자동 변환 가능한지 검사
(Firebird 3+)


8️⃣ 스토어드 프로시저 규칙

✔ RULE F-SP-01

문제: FOR SELECT 내부 NATURAL 스캔
자동 조치: 인덱스 생성 + PLAN 강제 옵션 제안


✔ RULE F-SP-02

문제: SP 내부 SELECT *
조치: 실사용 컬럼 기반의 최소 컬럼 세트 생성


✔ RULE F-SP-03

문제: 트리거/프로시저 내 UPDATE/DELETE 다량 호출
대응: 별도 배치 SP로 분리 추천


9️⃣ 기타 성능 규칙

✔ RULE F-ETC-01

문제: NATURAL 발생 위험 높은 쿼리 패턴
예: WHERE SUBSTRING(col,1,1) = 'A'
조치: 파생 컬럼 + 인덱싱


✔ RULE F-ETC-02

문제: BLOB 컬럼 정렬/조건사용
조치: 캐시 컬럼으로 분리


✔ RULE F-ETC-03

문제: FIRST/SKIP 과도 사용
조치: 정렬 최적화 필요성 체크


🔟 PLAN 체크 규칙 (Firebird 핵심)

✔ RULE F-PLAN-01

문제: PLAN NATURAL 등장
조치: 인덱스 필요 여부 분석


✔ RULE F-PLAN-02

문제: JOIN 재배치 필요
→ 옵티마이저가 불필요한 플랜 선택
자동 조치:

  • JOIN 순서 재정렬
  • 서브쿼리 분해
  • 인덱스를 가진 테이블 먼저 조회하도록 재작성

✔ RULE F-PLAN-03

문제: SORT 발생 → 성능 저하
대안: ORDER BY 인덱스 매칭


──────────────────────────────

🎯 활용 방법(실무 예시)

1) SQL 자동 분석기 구축

규칙을 기반으로 SQL 파싱 → 규칙 매칭 → 개선안 출력

2) 코드 리뷰 체크리스트

개발팀이 SQL 작성 시 “규칙 매칭” 결과 보고

3) Firebird 성능 모니터링 자동화

로그에서 NATURAL 스캔 증가 시 RULE F-PLAN-01 자동 알람

4) SQL 변환기(GPT 기반) 품질 향상

제가 Firebird SQL 변환 시 사용하는 최적화 규칙 그대로 적용 가능