Share via


SQL 陳述式處理

在討論如何以程式設計方式使用 SQL 技術前,必須先討論 SQL 陳述式的處理方式。 這三項技術涉及的步驟相同,但每項技術進行的時間不同。 下圖顯示處理 SQL 陳述式時所涉及的步驟,此語句會在本節的其餘部分討論。

Steps for processing an SQL statement

若要處理 SQL 陳述式,DBMS 會執行下列五個步驟:

  1. DBMS 先剖析 SQL 陳述式。 DBMS 會將陳述式分為個別字組 (稱為 Token),確保陳述式具有有效動詞和有效子句等等。 此步驟可偵測語法錯誤和拼字錯誤。

  2. DBMS 驗證陳述式。 DBMS 會根據系統目錄檢查陳述式。 陳述式中的所有具名資料表是否存在於資料庫? 所有資料行是否存在,且資料行名稱明確? 使用者是否具有執行陳述式的必要權限? 此步驟可偵測某些語意錯誤。

  3. DBMS 產生該陳述式的存取方案。 存取方案是執行該陳述式的所需步驟二進位表示法,等同於 DBMS 的可執行程式碼。

  4. DBMS 會最佳化存取方案。 DBMS 會探索執行存取方案的各種方式。 是否可使用索引來加速搜尋? DBMS 應先將搜尋條件套用至資料表 A,並聯結至資料表 B,或者應從聯結開始,稍後再使用搜尋條件? 可避免資料表循序搜尋或縮減為資料表子集嗎? 探索替代方案後,DBMS 會選擇其中一個。

  5. DBMS 會執行存取方案來執行陳述式。

根據所需的資料庫存取量和花費的時間量,用於處理 SQL 陳述式的步驟會有所不同。 剖析 SQL 陳述式無須存取資料庫,且可相當快速完成。 最佳化則是相當耗用 CPU 的程序,且需要存取系統目錄。 針對複雜的多資料表查詢,最佳化工具可能會探索執行相同查詢的數千種不同方式。 然而,執行查詢效率不彰時的成本通常很高,因此查詢執行速度增加可補償花費在最佳化的時間。 是否能使用相同的最佳化存取方案來執行重複的查詢,這一點格外重要。