查询原生编译

    这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好的性能。

    这种分工避免了重复的解析分析操作。查询和事务语句可以交互执行。此功能有时称为即时(Just-In-Time,JIT)查询编译。

    若要使用MOT的原生查询编译,请在执行查询之前调用PREPARE客户端语句。MOT将预编译查询和(或)从缓存预加载先前预编译的代码。

    下面是SQL中PREPARE语法的示例:

    发出EXECUTE命令时,将解析、分析、重写和执行预处理语句。这种分工避免了重复的解析分析操作,同时使执行计划依赖于特定的设置值。

    下面是在Java应用程序中调用PREPARE和EXECUTE语句的示例。

    1. // Example 1: PREPARE without bind settings
    2. String query = "SELECT * FROM getusers";
    3. while (rs1.next()) {…}
    4. // Example 2: PREPARE with bind settings
    5. String sqlStmt = "SELECT * FROM employees where first_name=? and last_name like ?";
    6. prepStmt2.setString(1, "Mark"); // first name “Mark”
    7. prepStmt2.setString(2, "%n%"); // last name contains a letter “n”
    8. while (rs2.next()) {…}

    MOT编译支持的特性和不支持的特性见下文。

    以下查询类型适合轻量执行:

      • SELECT (including SELECT for UPDATE)
      • UPDATE
      • DELETE
    • INSERT查询

    • 引用主键的完整前缀的范围UPDATE查询
    • 引用主键的完整前缀的范围SELECT查询
    • 引用每个连接表中主键的完整前缀的JOIN查询

    任何特殊的查询属性都不适用于轻量执行。特别是如果以下条件中的任何一项适用,则该查询不适合轻量执行。有关更多信息,请参阅“原生编译和轻量执行不支持的查询”。

    需要强调一点,如果查询语句不适用原生编译和轻量执行,不向客户端报告错误,查询仍以正常和规范的方式执行。

    有关MOT原生编译功能的详细信息,请参阅 “查询原生编译”或“查询原生编译(JIT)”的有关内容。