变量表与临时表的效率分析
昨日一朋友发来一段sql的存储过程(如下),让我看看能不能优化一下。 insert @T1 select g_no,co_no,si_no,str_no,sum(ind_qty) as qty from instock_detail where in_id = @id group by g_no,co_no,si_no,str_no--?unitstock -->保存在变量表中 insert @T2 select a.* from unitstock a,@T1 b where a.g_no =b.g_no and a.co_no =b.co_no and a.si_no =b.si_no and a.str_no=b.str_nodelete unitstock from @T1 a where unitstock.g_no=a.g_no and unitstock.co_no =a.co_no and unitstock.si_no=a.si_...
临时表与union all的性能差别
机器:cpu: 2g 内存: 2g 数据库:sql 2005 根据机器配置不同,结果会有不同. 性能测试说明: 1. 数据库服务器重启之后进行查询.即第一次查询的结果. 2. 是对数据库查询的性能比较. 测试情况: 1.在存储过程中使用临时表: (proc1) select top 1000 * into #t1 from somast insert into #t1 select top 100 * from somast select * from #t1 ---删除表数据 TRUNCATE TABLE #t1 --删除临时表 drop table #t1 执行时间为: 1039ms 2. 在存储过程中使用union all: (proc2) select top 1000 * from somast union all select t...
拼sql与存储过程的效率比较
1.关于拼sql语句执行与直接执行存储过程的效率比较 最近对于一个旧的程序的导入进行优化,不过由于这个导入程序原来是直接在程序中使用拼SQL语句执行导入,执行时间较长,一般要十分钟左右。 1)在程序代码中拼sql语句,类似代码如下: System.Data.OleDb.OleDbCommand Command=conn.CreateCommand(); Command.CommandTimeout=0; Command.Transaction=trans; Command.CommandType=CommandType.Text; string sql=""; for(int i=0;i<IWo_Img.Count;i++) { Wo_Img=IWo_Img[i] as EMS_EDI_WO_IMG; Wo_ImgDb.Wo_No=...
SQL Server查询性能优化(一)
SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找一遍。如果有可采用的索引,SQL Server只需要在索引层级查找每个索引分页的数据,再抓出所需要的少量数据分页即可。访问数据表内数以万计的数据分页与只访问少数索引的分页两者间的差异,让索引变成效能调校的最佳工具。 堆表的结果示意图: 堆表内的数据页和行没有任何特定的顺序,也不链接在一起。数据页之间唯一的逻辑连接是记录在 IAM 页内的信息。 假设订单明细表中有10...
SQL Server查询性能优化
第一:先对 SQL Server 查询性能优化——堆表、碎片与索引(一)中的例一的SET STATISTICS IO之后出现的关键信息如下 表 'T_EPZ_INOUT_ENTRY_DETAIL'。扫描计数 1,逻辑读 4825 次,物理读 6 次,预读 19672 次。 这句解释一下。(有些内容来自网络,有些内部是自己的理解。) SQL SERVER 数据库引擎当遇到一个查询语句时,SQL SERVER数据库引擎会分别生成执行计划(占用CPU和内存资源),同时存储引擎读取 IAM 以生成必须要读取的磁盘地址排序列表。这使 SQL Server 得以将其 I/O 优化为大型有序读取,根据它们在磁...