我发现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技术文章。