SQL 陳述式處理
在討論以程序設計方式使用 SQL 的技術之前,必須先討論 SQL 語句的處理方式。 這三項技術涉及的步驟相同,但每項技術進行的時間不同。 下圖顯示處理 SQL 語句時所涉及的步驟,本節其餘部分會討論這些步驟。
若要處理 SQL 語句,DBMS 會執行下列五個步驟:
DBMS 先剖析 SQL 陳述式。 DBMS 會將陳述式分為個別字組 (稱為 Token),確保陳述式具有有效動詞和有效子句等等。 此步驟可偵測語法錯誤和拼字錯誤。
DBMS 驗證陳述式。 DBMS 會根據系統目錄檢查陳述式。 陳述式中的所有具名資料表是否存在於資料庫? 所有資料行是否存在,且資料行名稱明確? 使用者是否具有執行陳述式的必要權限? 此步驟可偵測某些語意錯誤。
DBMS 產生該陳述式的存取方案。 存取方案是執行該陳述式的所需步驟二進位表示法,等同於 DBMS 的可執行程式碼。
DBMS 會最佳化存取方案。 DBMS 會探索執行存取方案的各種方式。 是否可使用索引來加速搜尋? DBMS 應先將搜尋條件套用至資料表 A,並聯結至資料表 B,或者應從聯結開始,稍後再使用搜尋條件? 可避免資料表循序搜尋或縮減為資料表子集嗎? 探索替代方案後,DBMS 會選擇其中一個。
DBMS 會執行存取方案來執行陳述式。
用來處理 SQL 語句的步驟會因所需的數據庫存取量和所花費的時間量而有所不同。 剖析 SQL 語句不需要存取資料庫,而且可以非常快速地完成。 最佳化則是相當耗用 CPU 的程序,且需要存取系統目錄。 針對複雜的多資料表查詢,最佳化工具可能會探索執行相同查詢的數千種不同方式。 然而,執行查詢效率不彰時的成本通常很高,因此查詢執行速度增加可補償花費在最佳化的時間。 是否能使用相同的最佳化存取方案來執行重複的查詢,這一點格外重要。