WEB开发网
开发学院数据库MSSQL Server 调优 SQL 过程 阅读

调优 SQL 过程

 2008-09-09 10:03:14 来源:WEB开发网   
核心提示: 为了解决第二个问题,DB2 使用了包缓存,调优 SQL 过程(2),该缓存不仅记住最近执行的过程,还记住了以前执行的语句,DB2 才可以真正取得所返回的行,做这么多工作仅仅是为了打开一个游标!现在,因此,在第一次编译 SQL 语句之后

为了解决第二个问题,DB2 使用了包缓存。该缓存不仅记住最近执行的过程,还记住了以前执行的语句。因此,在第一次编译 SQL 语句之后,后来的调用只要继续执行相同的执行计划即可。我们用一个例子来说明:

1 CREATE PROCEDURE get_dept_emps(dept_id dept_id_t)
2 BEGIN
3  DECLARE cur CURSOR WITH RETURN FOR
4   SELECT emp_name, emp_id FROM emp
5   WHERE emp_dept_id = dept_id;
6  OPEN cur;
7 END

注意,您可以从“下载”小节中下载带有完全 DDL 的所有例子。可以从 developerWorks 下载本文全文使用的 SQL PL Profiler。下面的屏幕快照展示了上述普通 SQL 过程的 100 次执行。

调优 SQL 过程

那么,时间消耗在哪些地方了呢?DB2 需要处理这条 CALL 语句。假设以前已经缓存了这个过程,那么,DB2 就需要初始化 SQL 过程,以便执行它。然后,DB2 打开从过程中返回的游标,并处理分配给结果集的定位器。最后,DB2 才可以真正取得所返回的行。做这么多工作仅仅是为了打开一个游标!

现在,让我们使用内联 SQL PL 来取得相同的效果:

1 CREATE FUNCTION get_dept_emps_f(dept_id dept_id_t)
2 RETURNS TABLE(emp_name name_t,
3         emp_id  emp_id_t)
4 RETURN SELECT emp_name, emp_id
5     FROM emp
6     WHERE emp_dept_id = emp_dept_id;

我们现在用 DECLARE 游标及其各自的 OPEN 语句来替换驱动程序过程中的 CALL 和所有定位器代码,并测试结果:

上一页  1 2 3 4 5 6 7  下一页

Tags:SQL 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接