WEB开发网
开发学院数据库DB2 SQL 过程的性能: 提示和技巧 阅读

SQL 过程的性能: 提示和技巧

 2008-09-17 16:29:00 来源:WEB开发网   
核心提示: 等同于下面的函数:CREATE FUNCTION GetPrice (Vendor CHAR(20), PId INT)RETURNS DECIMAL(10,3)LANGUAGE SQLBEGIN DECLARE price DECIMAL(10,3); IF Vendor = '

等同于下面的函数:

CREATE FUNCTION GetPrice (Vendor CHAR(20), PId INT)
RETURNS DECIMAL(10,3)
LANGUAGE SQL
BEGIN
  DECLARE price DECIMAL(10,3);
  IF Vendor = 'Vendor 1' THEN
     SET price = (SELECT ProdPrice
           FROM V1Table WHERE Id = Pid);
  ELSE IF Vendor = 'Vendor 2' THEN
     SET price = (SELECT Price
           FROM V2Table WHERE Pid = GetPrice.Pid);
  END IF;
  RETURN price;
END

请注意,尽管使用了 CALL 语句来调用过程,但还需要使用 VALUES 语句从命令行调用函数:

VALUES (GetPrice('IBM', 324))

另一方面,与过程不同的是,您可以在允许表达式的任何上下文中调用函数:

SELECT VName FROM Vendors WHERE GetPrice(Vname, Pid) < 100;
SET price = GetPrice(Vname, Pid);

因此,正如本节标题所展示的,当您只是从数据库抽取数据而不执行任何更改时,请考虑使用 SQL 函数而不是使用 SQL 过程。

使用用于临时数据的临时表

在 V7 中,DB2 引入了临时表。对临时表的操作通常比对常规表的操作快。让我们看一些原因:

首先,临时表的创建不会涉及向目录中插入项,并且临时表的使用也不会涉及对目录的访问;因此,不会有目录争用问题。

因为临时表只能由创建它们的应用程序访问,因此在其操作中不会涉及锁定问题。

如果指定了 NOT LOGGED 选项,则不对临时表上的操作记录日志(当然,这样就不可能回滚更改)。因此,如果您的存储过程生成了大量临时数据,并只打算在数据库的一个会话中使用它们,那么请将这些数据存储进临时表,这样可以显著地改进性能。

上一页  4 5 6 7 8 9 10  下一页

Tags:SQL 过程 性能

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