我正在尝试了解导致Oracle(10)数据库上的打开查询的原因。
在AWR上,它显示了非常多的解析调用(例如1小时内的15,000+),但执行了0次。
如何查询不被执行,但随后解析了15000次?
Parse Calls:15,000+
执行:0
SQL文本:从AVIEW中选择*
答案 0 :(得分:1)
SQL中的*将解释重复解析。您应该用字段名称列表替换它。
答案 1 :(得分:0)
Oracle 11,java,jdbc 11.2.0.3
当您getting sequence from insert喜欢这个时出现问题
PreparedStatement ps = connection.prepareStatement(QUERY, new String[] { "student_id" });
我们发现jdbc驱动程序准备" SELECT * FROM"每次插入前的声明。只有解析操作没有执行。
T4CConnection.doDescribeTable
T4CStatement localT4CStatement = new T4CStatement(this, -1, -1);
localT4CStatement.open();
String str1 = paramAutoKeyInfo.getTableName();
String str2 = new StringBuilder().append("SELECT * FROM ").append(str1).toString();
localT4CStatement.sqlObject.initialize(str2);
Oracle解析器不会使用" *"来解析已解析的查询。所以每个插入都有额外的解析操作。
答案 2 :(得分:0)
零执行表示查询未在AWR快照中完成
答案 3 :(得分:0)
我们有一个类似的问题,但查询略有不同:
select col1, col2, col3 from table
结果相同。解析率高,但执行次数为零。
原因是来自spring-jdbc的StatementCreatorUtils#setNull。版本4.2.7 执行时:
insert into table (col1, col2, col3) values (val1, null, null)
有一个参数类型的数据库调用。