쿼리 최적화는 관계형 데이터베이스의 성능, 특히 복잡한 SQL 문의 실행에 매우 중요합니다. 쿼리 최적화 프로그램은 각 쿼리를 구현하기 위한 최상의 방법을 결정합니다.
예를 들어 쿼리 최적화 프로그램은 주어진 쿼리에 대해 인덱스를 사용할지 여부와 여러 테이블을 조인할 때 사용할 조인 방법을 선택합니다. 이러한 결정은 SQL 성능에 엄청난 영향을 미치며 쿼리 최적화는 운영 시스템에서 데이터 웨어하우스, 분석 시스템, 콘텐츠 관리 시스템에 이르는 모든 애플리케이션의 핵심 기술입니다.
Query Optimization의 다양한 원리는 다음과 같습니다 -
-
데이터베이스가 쿼리를 실행하는 방식 이해 − 쿼리 최적화의 첫 번째 단계는 데이터베이스가 수행하는 작업을 이해하는 것입니다. 다른 데이터베이스에는 이에 대한 다른 명령이 있습니다. 예를 들어 MySQL에서는 "EXPLAIN [SQL Query]" 키워드를 사용하여 쿼리 계획을 볼 수 있습니다. Oracle에서는 "EXPLAIN PLAN FOR [SQL Query]"를 사용하여 쿼리 계획을 볼 수 있습니다.
-
가능한 한 적은 양의 데이터 검색 − 쿼리에서 복원된 정보가 많을수록 이러한 레코드를 처리하고 저장하기 위해 데이터베이스를 확장하는 데 더 많은 리소스가 필요합니다. 예를 들어 테이블에서 하나의 열만 가져와야 하는 경우 'SELECT *'를 사용하지 마십시오.
-
중간 결과 저장 − 때때로 쿼리에 대한 논리가 상당히 복잡할 수 있습니다. 부질의, 인라인 뷰, UNION 형태의 문장을 이용하여 원하는 결과를 얻을 수 있다. 이러한 방법의 경우 전환 결과는 데이터베이스에 저장되지 않고 쿼리 내에서 직접 사용됩니다. 이는 특히 과도기 결과에 행 수가 많은 경우 성취 문제로 이어질 수 있습니다.
다양한 쿼리 최적화 전략은 다음과 같습니다 -
-
색인 사용 − 인덱스를 사용하는 것은 쿼리 속도를 높이는 데 사용해야 하는 첫 번째 전략입니다.
-
집계 표 − 더 적은 양의 정보를 구문 분석해야 하므로 더 높은 수준에서 테이블을 미리 채우는 데 사용할 수 있습니다.
-
수직 분할 − 테이블을 열로 분할하는 데 사용할 수 있습니다. 이 방법은 SQL 쿼리를 처리하는 데 필요한 정보의 양을 줄입니다.
-
수평 분할 − 가장 자주 사용되는 데이터 값으로 테이블을 분할하는 데 사용할 수 있습니다. 이 방법은 SQL 쿼리를 처리하는 데 필요한 정보의 양을 줄입니다.
-
비정규화 - 비정규화 프로세스는 여러 테이블을 단일 테이블로 결합합니다. 이렇게 하면 필요한 테이블 조인이 줄어들기 때문에 쿼리 구현 속도가 빨라집니다.
-
서버 조정 − 각 서버에는 자체 매개 변수가 있으며 쿼리 구현 속도를 크게 높일 수 있는 하드웨어 리소스를 완전히 활용할 수 있도록 조정 서버 매개 변수를 제공합니다.