在DB2优化器中使用分布统计信息
2009-12-23 15:00:17 来源:WEB开发网仅在收集了一个表中至少一个列的分布统计信息时,SYSCAT.COLDIST 才会包含关于该表的条目。如果在没有 WITH DISTRIBUTION 的情况下再次执行 RUNSTATS,那么 SYSCAT.COLDIST 中与该表对应的条目将被删除。
分布统计信息和参数标记/主变量
JDBC 提供了两种途径来执行动态 SQL,因而也提供了两种不同的接口:
java.sql.Statement
java.sql.PreparedStatement
PreparedStatement 是 Statement 的子接口,它允许使用参数标记(= 占位符;在其他编程语言中,此类占位符也被称为主变量) —— 而不是 Statement。在使用 PreparedStatement 的情况下,首先编译要执行的包括参数标记的 SQL 语句,然后将值绑定到参数标记,最后执行 SQL 语句。
下面的代码片段显示使用 Statement 与使用 PreparedStatement 的不同之处。
清单 3. 使用 JDBC Statement 接口执行动态 SQL
java.sql.Connection con = ...;
java.sql.Statement stmt1 = con.createStatement();
String insert1 = "INSERT INTO TABLE_X (COL_Y) VALUES ('ABC')";
stmt1.executeUpdate(insert1);
java.sql.Statement stmt2 = con.createStatement();
String insert2 = "INSERT INTO TABLE_X (COL_Y) VALUES ('XYZ')";
stmt2.executeUpdate(insert2);
con.commit();
清单 4. 使用 JDBC PreparedStatement 接口执行动态 SQL
java.sql.Connection con = ...;
String insert = "INSERT INTO TABLE_X (COL_Y) VALUES (?)";
java.sql.PreparedStatement pstmt = con.prepareStatement(insert);
pstmt.setString(1, "ABC");
pstmt.executeUpdate();
pstmt.setString(1, "XYZ");
pstmt.executeUpdate();
con.commit();
如果一条简单 SQL 语句执行多次(例如示例中的 INSERT 语句),那么使用 PreparedStatement 有优势,因为数据库只需编译该语句一次,即可多次执行,而不需要重复编译。假设在示例中需要插入数千行记录,那么使用 PreparedStatement 可以交付更短的执行时间,因为只需一次准备/编译时间,而不需要数千次。
然而,Java 开发人员使用 PreparedStatement 往往是因为需要在运行时提供值/过滤器标准时,使用这种接口编写的代码更为优雅。请看如下代码片段:
清单 5. 使用字符串串联填充过滤标准
int state = 100;
String type = "A";
...
java.sql.Connection con = ...;
java.sql.Statement stmt = con.createStatement();
String select = "SELECT * FROM CARS WHERE
STATE < " + state + " AND TYPE = '" + type + "'";
java.sql.ResultSet rs = stmt.executeQuery(select);
while (rs.next()) {
...
}
清单 6. 使用参数标记填充过滤标准
int state = 100;
String type = "A";
...
java.sql.Connection con = ...;
String select = "SELECT * FROM CARS WHERE STATE < ? AND TYPE = ?";
java.sql.PreparedStatement pstmt = con.prepareStatement(select);
pstmt.setInt(1, state);
pstmt.setString(2, type);
java.sql.ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
...
}
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接