효율적인 SQL 구문

쿼리에 테이블을 포함하려면 WHERE 절에 하위 쿼리를 사용하는 대신 JOIN ( FROM 절에서)을 사용하십시오. 이 팁은 결과 집합이 아닌 필터링을 위해서만 테이블 데이터가 필요한 경우에도 적용됩니다.

FROM 절에서 여러 테이블을 연결하면 WHERE 절에서 하위 쿼리를 사용할 때보다 성능이 향상됩니다.

인덱스를 활용할 수 없는 SQL 문은 사용하지 마십시오. 이러한 명령문에는 하위 쿼리에서 집계 함수를 사용하거나, 하위 쿼리에서 UNION 문을 사용하거나, UNION 문과 함께 ORDER BY 절을 사용하는 경우가 포함됩니다.

인덱스를 사용하면 SELECT 쿼리를 처리하는 속도를 크게 향상시킬 수 있습니다. 하지만 일부 SQL 구문에서는 데이터베이스에서 인덱스 사용을 방해하여 검색 또는 정렬 작업에 실제 데이터를 강제로 사용하도록 만듭니다.

LIKE('%XXXX%') 와 같이 특히 선행 와일드카드 문자가 있는 경우에는 LIKE 같은 연산자를 사용하지 않는 것이 좋습니다..

LIKE 연산은 와일드카드 검색 사용을 지원하기 때문에 정확한 일치 비교를 사용하는 것보다 속도가 느립니다. 특히 와일드카드 문자로 검색 문자열을 시작하는 경우 데이터베이스에서 검색에 인덱스를 전혀 사용할 수 없습니다. 대신 데이터베이스에서는 테이블에 있는 각 행의 전체 텍스트를 검색해야 합니다.

IN 연산자는 사용하지 않는 것이 좋습니다. 가능한 값이 미리 알려진 경우에는 실행 속도를 높이기 위해 AND OR 을 사용하여 IN 연산을 작성할 수 있습니다.

다음 두 명령문 중에 두 번째 명령문이 더 빠르게 실행됩니다. 이 명령문은 IN() 또는 NOT IN() 문 대신 OR 과 조합된 단순 동격 비교를 사용하기 때문에 속도가 더 빠릅니다.

-- Slower 
SELECT lastName, firstName, salary 
FROM main.employees 
WHERE salary IN (2000, 2500) 
     
-- Faster 
SELECT lastName, firstName, salary 
FROM main.employees 
WHERE salary = 2000 
    OR salary = 2500
성능 향상을 위해 SQL 문의 대체 형식을 사용하십시오..

이전 예에서 설명한 것처럼 SQL 문의 작성 방식에 따라 데이터베이스 성능에 영향을 줄 수 있습니다. SQL SELECT 문을 작성하여 특정 결과 집합을 검색하는 방법은 여러 가지가 있습니다. 일부 경우에는 다른 방법보다 속도가 크게 빠른 방법이 존재할 수 있습니다. 앞에서 설명한 권장 사항 외에도 SQL 언어에 대한 전문 리소스를 통해 여러 가지 SQL 문 및 성능 정보를 배울 수 있습니다.