SQL 过程的性能: 提示和技巧
2008-09-17 16:29:00 来源:WEB开发网等同于下面的函数:
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 选项,则不对临时表上的操作记录日志(当然,这样就不可能回滚更改)。因此,如果您的存储过程生成了大量临时数据,并只打算在数据库的一个会话中使用它们,那么请将这些数据存储进临时表,这样可以显著地改进性能。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接