Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
JerryWang
Advisor
Advisor
0 Kudos
我发现Google和百度上关于HANA DB Hint的中文介绍比较少,所以就写了这一篇。本文部分内容来自SAP note 2142945 - FAQ: SAP HANA Hints。

什么是SAP HANA Hint


HANA Hint是SAP14 HANA数据库服务器执行的一种指令。HANA Hint会影响一个数据库请求的生成和处理的方式,但绝不会改变这些数据库请求的响应结果。通俗的说,如果你不用Hint, 执行某条SQL语句查询到了N条记录。那么用了Hint,查询结果仍然是N条。HANA Hint通常用来进行HANA的性能调优,比如对执行某条SQL语句CPU或者内存占用率的优化。


SAP HANA Hint有下列几种类型:


1. SAP HANA DB Hints



直接用于HANA Studio的SQL语句里。通过select * from hints能够拿到当前版本的HANA支持的所有Hint. 在我用的HANA服务器上总共216个:



用法: 如下图红色下划线所示:


如果您的Netweaver用的数据库是HANA,而您又想把这些Hint用在ABAP Open SQL里,那么可以使用语法: %_HINTS HDB后跟Hint的具体内容。例如下图:


如果Netweaver的版本小于740, 需要将HDB替换成ADABAS。


2. SAP ABAP Hints


对于那些Netweaver用的数据库是非HANA DB的场景,需要使用数据库提供商特定的Hint。具体细节可以查询对应的SAP note。


  • 130480 Database hints in Open SQL for Oracle



  • 133381 Database hints in Open SQL for MS SQL Server



  • 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里能查到。



3. SAP HANA Calculation View Hints



  • ce2qo_disable_unfolding

  • ce2qo_for_nested_views_with_sql_execution

  • enable_star_join_ceqo

  • ce2qo_for_unit_conversion

  • qo_pop_hints

  • query_level_sql_hints



这种类型的Hint用于HANA Studio里创建的Calculation View,而非ABAP Development Tool创建的CDS(Core Data Service) View. 我没有用过,没法举例。


更多细节请查询SAP note 2509161。


常用的HANA Hint介绍



详细列表能在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技术文章。