使用字面量或者绑定变量在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里使用各种工具分析该语句时,也要保证也使用绑定变量的方式执行。
看个具体的例子。在SAP CRM里,我写了下列一个简单的report,来搜索其抬头的描述字段包含了指定输入的关键字的那些服务订单。

这段代码调用BOL的API dquery实现数据库查询,最后会执行如下的OPEN SQL。

可以看到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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


使用字面量或者绑定变量在HANA Studio里执行SQL语句的更多相关文章
- sp_executesql动态执行sql语句并将结果赋值给一变量
需求场景: 需动态拼接sql语句进行执行,并将执行的结果赋值给一指定变量. 样例代码如下: SELECT @tableName = TAB_NAME FROM dbo.NMR_BLYWBDY WHER ...
- SQL内部拼接执行SQL语句时,实现变量参数化
exec sp_ExecuteSql执行的SQL语句拼接起是比较麻烦,如果关联的表多拼接过程是很容易出错的,下面这方法非常的好用,而且简单直观 if exists(select * from syso ...
- [转]ORACLE 绑定变量用法总结
转:http://blog.csdn.net/wanghai__/article/details/4778343 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析 ...
- ORACLE 绑定变量用法总结 .
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方 ...
- Oracle绑定变量在C#.NET中的应用及意义
一. 什么是绑定变量 绑定变量(bind variable) : select * from emp where empno=:empno; 是用户放入查询中的占位符,它会告诉Oracle“我会随后为 ...
- SQL优化 | Oracle 绑定变量
之前整理过一篇有关绑定变量的文章,不太详细,重新补充一下. Oracle 绑定变量 http://www.cndba.cn/Dave/article/1275 一.绑定变量 bind variable ...
- 什么是javascript字面量,常量,变量,直接量?
1.字面量是变量的字符串表示形式.它不是一种值,而是一种变量记法. var a = 1 //1是字面量 var b = 'css' //css是字面量 var c = [5,6,7] //567是字面 ...
- JS基础_字面量和变量
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础二--字面量和变量
/* 字面量,都是一些不可改变的值, 比如:1 2 3 4 5 字面量都是可以直接使用,但是我们一般不会直接使用字面量. 变量,变量可以用来保存字 ...
随机推荐
- mongodb的初步使用
一.mongodb简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产 ...
- mysql 数据库导入数据报错MySQL server has gone away解决办法
mysql 数据库导入数据报错MySQL server has gone away解决办法: 进入数据库执行以下命令即可: set global wait_timeout = 2880000; set ...
- CSS媒体查询及其使用
1.什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于 ...
- RBAC基于角色的权限访问控制
RBAC是什么,能解决什么难题?ThinkPHP中RBAC实现体系安全拦截器认证管理器访问决策管理运行身份管理器ThinkPHP中RBAC认证流程权限管理的具体实现过程RBAC相关的数据库介绍Th ...
- 安装Newton版Swift,配合keystone认证
主控节点安装配置 Keystone 认证服务 主控节点 IP:192.168.81.11 yum install centos-release-openstack-newton -y yum upda ...
- JSON转C#实体类
https://www.bejson.com/convert/json2csharp/
- [Verilog] parameter
parameter和localparam的作用范围均为本模块,区别在于前者可用于在实例化模块的时候进行参数的传递. 用已定义的参数对变量赋值时,按照补码的方式处理,若出现溢出的情况,则截取低位.
- Java Collection.Set
package 集合; /** * Set不包含重复元素 存储顺序和取出数据不一样 * * HashSet:它不保证set的迭代顺序,特别是它不保证该顺序恒久不变 * 底层是哈希表结构的 * Link ...
- pycharm激活码------2017.11.之前有效
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- 深入理解JavaScript系列(11):执行上下文(Execution Contexts)
简介 从本章开始,我将陆续(翻译.转载.整理)http://dmitrysoshnikov.com/网站关于ECMAScript标标准理解的好文. 本章我们要讲解的是ECMAScript标准里的执行上 ...