存储过程中Sql 语句查询速度优化 某例
之前的SQL语句如下,查询很慢,6分钟多都没有结果显示,一开始我以为是6张表联合查询带来的速度慢的问题。
后来发现因为PO_D.ORDNO与PO_H.ORDNO相同,把绿色部分替换为紫色的部分,
把PO_D替换为PO_H,10秒钟就能查询出来
PS:PO_D中101401笔数据,PO_H中51341笔数据。
虽没有想明白替换之后提速到如此之快仅10秒,与6分钟未出结果差异太大,但毋庸置疑的是应该以数据量少的表
作相关外键查询是可以提高速度的。所以在写SQL语句时注意此处。
SELECT (SELECT DEPT_CODE from AM_EMPLOYEE WHERE EMP_NO=PO_H.APPLICANT) AS DEPT_CODE,
(SELECT LOGIN_NAME from AM_EMPLOYEE WHERE EMP_NO=PO_H.APPLICANT) AS LOGIN_NAME,
PO_D.FPRNO,
PO_D.ORDNO,
PO_H.MDATE,
PO_T.ITDSC,
PO_T.ITEMSPEC,
PO_D.UMORD,
PO_D.ACTQY,
PO_D.POISQ,
PV.VENDOR,
PV.VNDNAM,
PO_H.CURCY,
PO_D.UNITP,
PO_T.ECDNO,
PC_PACN_LIST.PRICE,
(PC_PACN_LIST.PRICE-PO_D.UNITP) AS BALANCE
from
IPPOHM AS PO_H,
IPPODM AS PO_D,
IPAVM AS PV,
IPPOTM AS PO_T,
PC_PACN_LIST
WHERE
PO_D.ORDNO = PV.VORDNO
AND
PO_H.ORDNO =PO_D.ORDNO
AND
PO_D.ORDNO
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......
数据压缩(Data Compression)是SQL Server 2008引入的新特性之一,这项技术使数据更有效的保存并且极大减少了存储开销,同时也带来了性能上的显著提高,尤其是对需要大量磁盘I/O的数据仓库。
注:其实在SQL Server 2005 SP2版本中,已经引入了 vardecimal ,它使用变长的格式存储定长的decimal和numberic数据。
......
CREATE PROCEDURE fenye
@tblName varchar(255)='wdf1', -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='userid', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设 ......
在ETL过程中,经常会碰到取结果集的最后或最前一条记录。如取活期存款的当前利率,开户金额,协定利率等。如果不用LOOKUP的方式,如通过游标取或者ETL工具LOOKUP组件什么的,在一条SQL里实现,目前实现有几种方法。
1.以时间或其他字段分组后在自连自己,这样不仅可以带出需要LOOKUP的字段,还可以带出其他需要的字 ......