SQL 문 처리
SQL을 프로그래밍 방식으로 사용하는 방법을 논의하기 전에 SQL 문이 처리되는 방법을 논의해야 합니다. 각 기술은 서로 다른 시간에 수행하지만 관련된 단계는 세 가지 기술 모두에 일반적입니다. 다음 그림에서는 이 섹션의 나머지 부분에서 설명하는 SQL 문 처리와 관련된 단계를 보여 줍니다.
SQL 문을 처리하기 위해 DBMS는 다음 5단계를 수행합니다.
DBMS는 먼저 SQL 문을 구문 분석합니다. 문을 토큰이라고 하는 개별 단어로 분할하여 문에 유효한 동사와 유효한 절이 있는지 확인하는 등의 작업을 합니다. 구문 오류 및 맞춤법 오류는 이 단계에서 검색할 수 있습니다.
DBMS는 문의 유효성을 검사합니다. 시스템 카탈로그에 대해 문을 확인합니다. 문에 명명된 모든 테이블이 데이터베이스에 있나요? 모든 열이 존재하며 열 이름이 명확하지 않은가요? 사용자에게 문을 실행하는 데 필요한 권한이 있나요? 이 단계에서 특정 의미 체계 오류를 검색할 수 있습니다.
DBMS는 문에 대한 액세스 계획을 생성합니다. 액세스 계획은 문을 수행하는 데 필요한 단계의 이진 표현입니다. 실행 코드와 동일한 DBMS입니다.
DBMS는 액세스 계획을 최적화합니다. 액세스 계획을 수행하는 다양한 방법을 살펴봅니다. 인덱스로 검색 속도를 높일 수 있나요? DBMS는 먼저 테이블 A에 검색 조건을 적용한 다음 테이블 B에 조인해야 하나요? 아니면 조인으로 시작하고 나중에 검색 조건을 사용해야 하나요? 테이블을 통한 순차 검색을 방지하거나 테이블의 하위 집합으로 줄일 수 있나요? 대안을 탐색한 후 DBMS는 그 중 하나를 선택합니다.
DBMS는 액세스 계획을 실행하여 문을 실행합니다.
SQL 문을 처리하는 데 사용되는 단계는 필요한 데이터베이스 액세스의 양과 수행하는 시간에 따라 다릅니다. SQL 문을 구문 분석해도 데이터베이스에 액세스할 필요가 없으며 매우 빠르게 수행할 수 있습니다. 반면 최적화는 CPU를 많이 사용하는 프로세스이며 시스템 카탈로그에 액세스해야 합니다. 복잡한 다중 테이블 쿼리의 경우 최적화 프로그램은 동일한 쿼리를 수행하는 수천 가지 방법을 탐색할 수 있습니다. 그러나 쿼리 실행 비용이 비효율적으로 너무 높아서 최적화에 소요된 시간이 쿼리 실행 속도 증가로 다시 회복되는 것보다 더 큽 수 있습니다. 이는 반복적인 쿼리를 수행하기 위해 동일한 최적화된 액세스 계획을 반복해서 사용할 수 있는 경우에 더욱 중요합니다.