查询原生编译
这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好的性能。
这种分工避免了重复的解析分析操作。查询和事务语句可以交互执行。此功能有时称为即时(Just-In-Time,JIT)查询编译。
若要使用MOT的原生查询编译,请在执行查询之前调用PREPARE客户端语句。MOT将预编译查询和(或)从缓存预加载先前预编译的代码。
下面是SQL中PREPARE语法的示例:
发出EXECUTE命令时,将解析、分析、重写和执行预处理语句。这种分工避免了重复的解析分析操作,同时使执行计划依赖于特定的设置值。
下面是在Java应用程序中调用PREPARE和EXECUTE语句的示例。
// Example 1: PREPARE without bind settings
String query = "SELECT * FROM getusers";
while (rs1.next()) {…}
// Example 2: PREPARE with bind settings
String sqlStmt = "SELECT * FROM employees where first_name=? and last_name like ?";
prepStmt2.setString(1, "Mark"); // first name “Mark”
prepStmt2.setString(2, "%n%"); // last name contains a letter “n”
while (rs2.next()) {…}
MOT编译支持的特性和不支持的特性见下文。
以下查询类型适合轻量执行:
-
- SELECT (including SELECT for UPDATE)
- UPDATE
- DELETE
INSERT查询
- 引用主键的完整前缀的范围UPDATE查询
- 引用主键的完整前缀的范围SELECT查询
- 引用每个连接表中主键的完整前缀的JOIN查询
任何特殊的查询属性都不适用于轻量执行。特别是如果以下条件中的任何一项适用,则该查询不适合轻量执行。有关更多信息,请参阅“原生编译和轻量执行不支持的查询”。
需要强调一点,如果查询语句不适用原生编译和轻量执行,不向客户端报告错误,查询仍以正常和规范的方式执行。
有关MOT原生编译功能的详细信息,请参阅 “查询原生编译”或“查询原生编译(JIT)”的有关内容。