RDM SQL利用一種基於成本的優化查詢的方法,在該方法中,查詢優化器將分析數據使用情況信息,以確定執行查詢的最快方式。在RDM 11中,SQL可用的信息僅限於引用表中的行數,以及用戶通過create table語句中使用的可選的不同值和範圍列聲明子句提供的任何其他信息。
對於基本查詢,這不會造成任何問題,因為這些執行選項選擇很簡單。但是對於更複雜的查詢,其中涉及從滿足以下條件的多個表中檢索數據: 在哪裡 子句由多個條件表達式組成,這些限制可能會導致明顯的性能損失。
RDM 12.0對SQL做出良好執行計劃選擇的能力進行了重大改進,該選擇將產生執行得更快的查詢。一個新的聲明, 更新統計 (統計資料),現在可以在已填充的數據庫上執行,該數據庫將收集數據庫中每個表的每一列的數據分佈統計信息。然後,SQL優化器將使用此數據來更好地預測與可用於訪問查詢中引用的每個表的行的每種可能方法相關的訪問成本。
用戶通過以下方式中的可選子句控制要採樣的數據量和要存儲的分佈數據的範圍。 更新統計 陳述。數據庫越大,花費的時間越長 更新統計 收集分發數據。由於用戶可以通過指定要採樣的數據庫的百分比來控制讀取的數據量,因此可以緩解這種情況。此外,數據收集是多線程的,並且由 更新統計 子句,或者默認情況下設置為計算機上的核心CPU數量。
還提供了指定條件的能力,該條件將導致系統自動運行 更新 統計資料 根據自上次運行以來數據庫已更改的數量。因此,您可能只需要手動運行 更新統計 一次,系統將根據您在第一次運行中指定的更改參數自動控制其他運行。
存儲過程可以包含一個或多個 選擇 使用當時可用的統計信息進行編譯和優化的語句 建立程序 被執行了。存儲過程允許使用預編譯的SQL語句,因此不必在應用程序執行時產生編譯費用。 RDM 12 SQL已添加 自動編譯 條款 建立程序 語句,如果發生以下情況,該語句將導致SQL自動重新編譯存儲過程 更新統計 自上次執行該過程以來一直運行。當然,這將為該特定執行增加執行時間的重新編譯成本,但是在許多情況下,由於數據分佈統計信息的更改以及對優化程序的執行計劃產生積極影響,所有後續執行都會更快選擇。
收集的統計信息存儲在名為的文件中 數據庫名稱.sts與數據庫文件和目錄文件位於TFS的同一目錄中(數據庫名稱。貓)。
提供了四個新的系統目錄文件,可以查詢這些文件,以查看收集的統計信息。例如,表sys$dbstats包含每個打開的數據庫的一行,在該數據庫上 更新統計 已執行。表格中的信息包括統計文件版本號,日期 更新統計 上次運行的時間 更新統計,存儲在數據庫中的總行數以及每個 更新統計 控制參數。其他表包括sys$tabstats,sys$colstats和sys$colhisto。最後一張表包含數據庫中各列收集的分發統計信息。使用此信息以及對優化器的工作方式的理解,如“RDM SQL如何處理查詢”可以幫助您分析特定的SQL查詢。
借助RDM 12 SQL中的數據分佈統計信息,可以在RDM 12 SQL應用程序中實現基於成本的複雜查詢優化的全部好處。