ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL优化小讲堂(三)——合理使用临时表

2021-03-11 23:00:01  阅读:211  来源: 互联网

标签:temp 临时 sales 查询 讲堂 SQL 优化 SELECT 页面


SQL专栏

SQL基础知识汇总

SQL高级知识汇总

今天我们来讲讲临时表的优化技巧

临时表,顾名思义就只是临时使用的一张表,一种是本地临时表,只能在当前查询页面使用,新开查询是不能使用它的,一种是全局临时表,不管开多少查询页面均可使用。


本地临时表

本地临时表在表名前加#即可,我们先来看看本地临时表的特性

我们新建一个查询页面,输入如下代码:


SELECT TOP 10 * INTO #temp
FROM sales.Temp_Salesorder;
SELECT * FROM #temp;

结果如下:

SQL优化小讲堂(三)——合理使用临时表

我们再新开一个页面,重新输入如下代码:


SELECT * FROM #temp;

结果如下:

SQL优化小讲堂(三)——合理使用临时表

证明本地临时表只能在当前页面执行。

全局临时表
全局临时表在表名前加##即可,打开任何一个查询页面都可以使用它。

重复上面的步骤:


SELECT TOP 10 * INTO ##temp
FROM sales.Temp_Salesorder
SELECT * FROM ##temp;

结果和上面一样:

SQL优化小讲堂(三)——合理使用临时表
我们再新开一个页面:

SELECT * FROM ##temp;

结果还是一样。证明全局临时表所有查询页面均可以使用。

临时表的优化方法
介绍完临时表,我们来说说如何用它来进行优化

临时表的优化一般使用再子查询较多的情况下,也称为嵌套查询。我们写如下子查询:


SELECT * FROM sales.Temp_Salesorder
WHERE SalesOrderDetailID IN
(SELECT SalesOrderDetailID FROM sales.SalesOrderDetail
WHERE UnitPrice IN
(SELECT UnitPrice FROM sales.SalesOrderDetail WHERE UnitPrice>0)
)

(提示:代码可以左右滑动)

这是一个比较简单的两层嵌套子查询,我们看一下执行情况:

SQL优化小讲堂(三)——合理使用临时表

可以看到这里的逻辑读取是比较高的。

我们用临时表重新来看下执行情况如何,我们将第一二层的查询结果插入到#temp中,然后从临时表中查询结果。


SELECT SalesOrderDetailID INTO #temp FROM sales.SalesOrderDetail
WHERE UnitPrice IN (SELECT UnitPrice FROM sales.SalesOrderDetail WHERE UnitPrice>0)

SELECT * FROM sales.Temp_Salesorder
WHERE SalesOrderDetailID IN
(SELECT SalesOrderDetailID FROM #temp)

执行情况如下:

SQL优化小讲堂(三)——合理使用临时表

SQL优化小讲堂(三)——合理使用临时表

相比上一次的逻辑读,成倍的减少了逻辑读取次数。在对查询的性能进行调节时,如果逻辑读值下降,就表明查询使用的服务器资源减少,查询的性能有所提高。如果逻辑读值增加,则表示调节措施降低了查询的性能。在其他条件不变的情况下,一个查询使用的逻辑读越少,其效率就越高,查询的速度就越快。

因此我们可以看出临时表在比较复杂的嵌套查询中是可以提高查询效率的。

今天的课就讲到这里,有不明白的同学可以在下方留言,我会一一回复。

标签:temp,临时,sales,查询,讲堂,SQL,优化,SELECT,页面
来源: https://blog.51cto.com/15057820/2656462

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有