我發現Google和百度上關於HANA DB Hint的中文介紹比較少,因此就寫了這一篇。本文部份內容來自SAP note 2142945 – FAQ: SAP HANA Hints。sql
HANA Hint是SAP14 HANA數據庫服務器執行的一種指令。HANA Hint會影響一個數據庫請求的生成和處理的方式,但毫不會改變這些數據庫請求的響應結果。通俗的說,若是你不用Hint, 執行某條SQL語句查詢到了N條記錄。那麼用了Hint,查詢結果仍然是N條。HANA Hint一般用來進行HANA的性能調優,好比對執行某條SQL語句CPU或者內存佔用率的優化。數據庫
SAP HANA Hint有下列幾種類型:服務器
直接用於HANA Studio的SQL語句裏。經過select * from hints可以拿到當前版本的HANA支持的全部Hint. 在我用的HANA服務器上總共216個:微信
用法: 以下圖紅色下劃線所示:性能
若是您的Netweaver用的數據庫是HANA,而您又想把這些Hint用在ABAP Open SQL裏,那麼能夠使用語法: %_HINTS HDB後跟Hint的具體內容。例以下圖:優化
若是Netweaver的版本小於740, 須要將HDB替換成ADABAS。翻譯
對於那些Netweaver用的數據庫是非HANA DB的場景,須要使用數據庫提供商特定的Hint。具體細節能夠查詢對應的SAP note。orm
130480 Database hints in Open SQL for Oracle內存
133381 Database hints in Open SQL for MS SQL Serverit
150037 Database hints in Open SQL for DB6 (DB2 UDB)
152913 Database hints in Open SQL for Informix
162034 DB2/390: Database hints in Open SQL
485420 iSeries: Database hints for Open SQL/Native SQL
652096 Database hints in Open SQL for SAPDB / MaxDB
1702338SYB: Database hints in Open SQL for Sybase ASE
在ABAP的OPEN SQL裏使用方法相似,把 %_HINTS後的HDB替換成指定數據庫提供商的代號,再加上數據庫提供商特定的Hint.
ABAP支持的數據庫提供商的代號在ABAP help裏能查到。
這種類型的Hint用於HANA Studio裏建立的Calculation View,而非ABAP Development Tool建立的CDS(Core Data Service) View. 我沒有用過,無法舉例。
更多細節請查詢SAP note 2509161。
詳細列表能在note 2142945的正文裏找到,這裏就不贅述了。值得一提的是,並無一個統一的最佳實踐指明瞭諸如」應用某某hint就必定能提升性能」。Hint的使用須要根據具體的SQL語句來分析,沒辦法一律而論。
最極端的例子就是這對互斥的Hint: CS_JOIN 和NO_CS_JOIN, 它們分別用於建議HANA數據庫採用或者不採用Column Store Join來響應數據請求。
個人一個實際工做中的例子:這個簡單的報表從HANA數據庫中讀取100條描述信息包含了文本」2017-12-11″的服務訂單:
總共花費了15秒鐘:
而當我加上NO_CS_JOIN的hint以後,
性能提高到不到1秒即完成了數據查詢。
在note 2142945的末尾還包含不少其餘有用的note。未來若是工做須要,我會將這些note陸續翻譯成中文並加上本身的理解。
但願本文能幫助您對SAP HANA Hint有一個最基本的認識。您能夠關注個人微信公衆號」汪子熙「得到個人更多原創SAP技術文章。