提高SQL Server性能的五种方法
2008-09-02 09:59:02 来源:WEB开发网 create TABLE #Temp1 (OrderID INT NOT NULL, _
OrderDate DATETIME NOT NULL)
insert INTO #Temp1 (OrderID, OrderDate)
select TOP 5 o.OrderID, o.OrderDate
FROM Orders o ORDER BY o.OrderDate DESC
select p.ProductName, SUM(od.Quantity) AS ProductQuantity
FROM #Temp1 t
INNER join [Order Details] od ON t.OrderID = od.OrderID
INNER join Products p ON od.ProductID = p.ProductID
GROUP BY p.ProductName
ORDER BY p.ProductName
drop TABLE #Temp1
这些SQL语句会创建一个临时表,将数据插入该表中,将其他数据与该表进行联接,然后除去该临时表。这会导致此查询进行大量I/O操作,因此,可以重新编写查询,使用内嵌视图取代临时表。内嵌视图只是一个可以联接到FROM子句中的查询。所以,您不用在tempdb中的临时表上耗费大量I/O和磁盘访问,而可以使用内嵌视图得到同样的结果:
select p.ProductName,
SUM(od.Quantity) AS ProductQuantity
FROM (
select TOP 5 o.OrderID, o.OrderDate
FROM Orders o
ORDER BY o.OrderDate DESC
) t
INNER join [Order Details] od ON t.OrderID = od.OrderID
INNER join Products p ON od.ProductID = p.ProductID
GROUP BY
p.ProductName
ORDER BY
p.ProductName
此查询不仅比前面的查询效率更高,而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询,则可以试试使用内嵌视图,以节省资源。
- ››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表' (数...
更多精彩
赞助商链接