使用字面量或者綁定變量在HANA Studio裏執行SQL語句

在SAP note 2000002 – FAQ: SAP HANA SQL Optimization裏提到了SQL語句的兩種執行方式,具體差別體如今where語句裏搜索條件的指定方式上。數據庫

所謂Literals, 就是咱們一般所說的hard code – 硬編碼,在下面的例子裏已經寫得很清楚了。 工具

而Bind variables – 綁定變量, 就是指在出如今SQL語句的where條件是維護在變量裏,這些變量的值根據應用程序的邏輯計算出來。一個典型的例子以下: 性能

關於這兩種執行方式,SAP note裏有這樣的提示:測試

It can make a significant difference in terms of execution plan, performance and resource consumption if a SQL statement is executed with explicit literals or with bind variables. Therefore it is recommended that you analyze an expensive SQL statement that uses bind variables in the same way, i.e. also with bind variables.編碼

大意是說: 這兩種執行方式會影響執行計劃, 性能和運行時的資源消耗。所以SAP建議,若是您在分析一個存在性能問題的ABAP OPEN SQL時,若是該ABAP OPEN SQL是經過綁定變量的方式執行,那麼,您在HANA Studio裏使用各類工具分析該語句時,也要保證也使用綁定變量的方式執行。code

看個具體的例子。在SAP CRM裏,我寫了下列一個簡單的report,來搜索其擡頭的描述字段包含了指定輸入的關鍵字的那些服務訂單。 orm

這段代碼調用BOL的API dquery實現數據庫查詢,最後會執行以下的OPEN SQL。 ci

能夠看到OPEN SQL的where語句裏的條件都是運行期動態計算填充的,在編譯期不可見。這屬於上文介紹的第二種執行方式:綁定變量。資源

所以,若是咱們想將對應的SQL語句在HANA Studio裏執行以便利用那裏各類有用的性能分析工具,咱們要注意須要用正確的方式把SQL粘貼到HANA Studio裏。字符串

錯誤的作法

從Edit->Display Execution Plan->For Recorded Statement找到須要粘貼的statement:

若是把下面這段紅色的SQL語句粘貼到HANA Studio裏執行,那就沒可以徹底模擬個人測試report執行的ABAP Open SQL,由於這裏粘貼的SQL的where語句已經被轉換成字面量方式了(下圖藍色區域),而個人ABAP Open SQL的where語句從上圖介紹來看是經過綁定變量來執行的。根據SAP note,這二者不等價。

正確的作法

把下面這段SQL粘貼到HANA Studio裏。注意藍色區域的綁定變量的風格,和」錯誤的作法」裏的字面量風格相比較。

把SQL statement粘貼到HANA Studio裏,執行,能看到下列這個tab: Prepared SQL。右鍵,選擇Add Parameter Values。

輸入下列字符串: 504,BUS2000116,BUS2000116,BUS2000140,BUS2000105,BUS2000137,BUS2000131,BUS2000146,BUS2000159,BUS2000153,BUS2000199,,Y,,%2017-12-21%,SRVO,100

這些值即被自動填充到SQL語句where條件對應的綁定變量裏。

執行SQL,獲得結果。經過這種方式在HANA Studio裏執行SQL語句才能真正保證和我在SAPGUI裏執行ABAP report進而執行的SQL語句性能徹底一致。

要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索