5. 쿼리 리팩토링 (비효율적인 쿼리 수정)
• 쿼리 자체가 비효율적일 때, 이를 리팩토링하면 성능을 크게 향상시킬 수 있다.
• 예를 들어, 서브쿼리 대신 조인을 사용하거나, GROUP BY를 최적화하거나, 불필요한 DISTINCT를 제거하는 등의 방법이다.
비효율적인 쿼리 예시:
SELECT DISTINCT FolderName
FROM Folders
WHERE FolderID IN (SELECT FolderID FROM Files WHERE FileType = 'txt')
최적화된 쿼리 예시:
SELECT FolderName
FROM Folders F
INNER JOIN Files FL
ON F.FolderID = FL.FolderID
WHERE FL.FileType = 'txt'
• DISTINCT는 성능을 저하시킬 수 있기 때문에 가능하면 JOIN을 통해 조건을 바로 걸어주는 것이 좋다.
6. Query Hints 활용
• SQL Server에서는 **쿼리 힌트(Query Hints)**를 사용해서 실행 계획을 변경할 수 있다. 예를 들어, OPTION (FORCE ORDER)를 사용하여 조인의 순서를 강제로 지정하거나, OPTION (RECOMPILE)을 사용하여 쿼리 계획을 매번 새로 생성하게 할 수 있다.
SELECT *
FROM Folders F
INNER JOIN Files FL
ON F.FolderID = FL.FolderID
OPTION (FORCE ORDER)
• 주의: QUERY HINT는 실행 계획에 영향을 미치므로, 과도하게 사용하면 오히려 성능 저하를 일으킬 수 있다.
7. Materialized Views 또는 Indexed Views 사용
• 데이터베이스에서 자주 사용되는 복잡한 쿼리나 집계 연산이 있을 경우, 이를 미리 계산해놓고 뷰로 저장해두는 방법이 있다.
• **Indexed View**는 뷰에 인덱스를 추가하여 조회 성능을 높일 수 있다.
CREATE VIEW vw_FolderFileCount AS
SELECT FolderID, COUNT(*) AS FileCount
FROM Files
GROUP BY FolderID
• 이렇게 만든 뷰를 사용하면 복잡한 계산을 미리 해놓고 쿼리 성능을 높일 수 있다.
8. 데이터 분할 (Partitioning)
• 큰 테이블에서 데이터가 매우 많을 때, 파티셔닝을 이용하여 성능을 최적화할 수 있다. 테이블을 여러 파티션으로 나누면 각 파티션에 대해 별도로 쿼리할 수 있어서 성능이 향상된다.
CREATE PARTITION FUNCTION PF_FolderRange (INT)
AS RANGE RIGHT FOR VALUES (100, 200, 300)
CREATE PARTITION SCHEME PS_FolderRange
AS PARTITION PF_FolderRange
TO ([Primary], [Secondary], [Tertiary])
'IT > MSSql' 카테고리의 다른 글
[MSSQL] SP_LOCK (LOCK 조회) (0) | 2025.04.22 |
---|---|
[MSSQL] DB 스케줄 자동 백업 관리 (0) | 2025.04.22 |
[MSSQL]날짜 형 변환 / CONVERT(자료형,DATETIME,형식) (0) | 2025.04.22 |
[MSSQL] 쿼리 속도 향상을 위한 팁 - 3 (0) | 2025.04.22 |
[MSSQL] 쿼리 속도 향상을 위한 팁 - 1 (0) | 2025.04.18 |