oracle跟踪文件中参数名称的意义

时间:2010-12-14 13:52:07

标签: oracle trace

我在oracle的SQL tracing功能的帮助下比较了oracle的两个不同JDBC驱动程序的结果。我正在使用TKProf格式化结果。

当我查看TKProf的输出时,有时会看到名为前缀为'v'的参数:

WHERE start_time BETWEEN  :v0  AND  :v1

在其他情况下,参数不带前缀:

WHERE start_time BETWEEN :1 AND :2

我怀疑在第二种情况下,查询优化器没有选择一些索引。

参数的命名约定是否有提示?

2 个答案:

答案 0 :(得分:3)

我当然不是JDBC驱动程序如何与数据库通信的专家。幸运的是,其他人会提供这些细节。

但我相信参数名称不应该是什么意思。这应该是特定驱动程序在将查询发送到数据库时决定调用它们的内容。但是如果你可以查看绑定变量的实际值,那可能会告诉你一些事情。我担心的是一个驱动程序正在设置它,因此值必须在运行查询的过程中经过强制转换,这可能会影响索引的使用。

答案 1 :(得分:1)

它们是客户端软件选择的私有绑定变量名称;可能在您的Java代码中,查询具有between ? and ?,必须将其转换为Oracle将理解的内容。名称几乎无关紧要 - 当然与索引或优化无关。我说“差不多”因为我不确定Oracle是否会将它们视为相同的查询,或者会对每个查询进行单独的硬分析。