我使用Spring JdbcUtils.extractDatabaseMetaData()方法来分析数据库.该函数调用回调并移交DatabaseMetaData对象.此对象提供getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern).
我把它称为getColumns(“”,TABLE_OWNER_USERNAME,null,null),结果得到400列.这些正是我想要的结果,但请求需要1分钟.
我可以以某种方式优化此查询以快速?拉动400行应该在1秒而不是1分钟内完成.
编辑:我不怀疑Spring部分很慢.更仔细的分析表明,获取DatabaseMetaData需要几秒钟的时间,执行getColumns()需要很长时间.
最佳答案
也许这是查询ALL_TAB_COLUMNS的更好方法.这是一个例子:
public final Listsql = "SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,"
+ " DATA_PRECISION,DATA_SCALE,NULLABLE,DATA_DEFAULT"
+ " FROM ALL_TAB_COLUMNS"
+ " WHERE OWNER = ? ORDER BY COLUMN_ID";
return jdbcTemplate.query(sql,new Object[] { owner },new RowMappersqlException {
final Column reg = new Column();
reg.setColumnName(res.getString("COLUMN_NAME"));
//Read other properties
reg.setNullable(res.getString("NULLABLE").equals("Y"));
return reg;
}
});
}
如果您需要按表格过滤,只需添加“AND TABLE_NAME =?”将sql和tableName作为另一个参数.
希望能帮助到你.