[MSSQL] 쿼리 속도 향상을 위한 팁 - 1
📌 속도 최적화를 위한 SQL 쿼리 기법
1. WITH(NOLOCK) (락을 무시하고 읽기)
• 이미 설명한 대로, ** WITH(NOLOCK) **은 데이터를 락을 걸지 않고 읽기 때문에 동시성이 매우 높은 환경에서 성능을 크게 향상시킬 수 있다.
• 다만, 정확성이 떨어질 수 있기 때문에 읽기 전용 쿼리에서만 사용하는 것이 좋다.
SELECT * FROM Folders WITH(NOLOCK)
2. INDEX 활용
• **인덱스(Index)**를 적절히 사용하면 데이터 검색 속도가 비약적으로 빨라진다.
◦ 검색 쿼리나 정렬(ORDER BY)이 자주 사용되는 컬럼에 인덱스를 추가하는 것이 중요.
◦ 인덱스를 생성할 때 쿼리에서 자주 사용되는 컬럼을 기준으로 인덱스를 만들면 검색 성능이 좋아진다.
CREATE INDEX idx_FolderName ON Folders (FolderName);
• 주의: 인덱스는 데이터 삽입, 업데이트 속도를 느리게 할 수 있으므로, 주의해서 사용해야 한다.
3. TOP을 사용하여 데이터 제한
• 쿼리에서 필요한 데이터만 최소한으로 조회하도록 제한하는 것도 좋은 방법.
• 예를 들어, 상위 10개 데이터만 필요하면 TOP 10을 사용해서 성능을 개선할 수 있다.
SELECT TOP 10 * FROM Folders ORDER BY FolderName
• 이 방법은 불필요한 데이터를 불러오는 시간을 줄여주기 때문에 성능 개선에 도움이 된다.
4. INNER JOIN과 LEFT JOIN 최적화
• JOIN을 사용할 때 불필요한 LEFT JOIN을 피하고, INNER JOIN을 사용하는 것이 성능에 유리하다.
• INNER JOIN은 두 테이블에서 매칭되는 데이터만 가져오기 때문에 성능이 더 빠르다.
SELECT F.FolderID, F.FolderName FROM Folders F INNER JOIN Files FL ON F.FolderID = FL.FolderID;
• LEFT JOIN을 사용하면 NULL 값이 포함된 결과가 나오기 때문에 더 많은 데이터를 처리할 수 있어 성능에 악영향을 미칠 수 있다.
• JOIN을 할 때는 크기가 작은 테이블을 먼저 JOIN하는게 성능에 더 좋다.
SELECT F.FolderID, F.FolderName From Folders F INNER JOIN Order OR ON F.FolderID = OR.FolderID