当前位置: 首页 > 科技观察

临时表在SQL优化中的作用

时间:2023-03-14 17:16:01 科技观察

本文转载自微信公众号《SQL数据库开发》,作者,平凡的世界。转载本文请联系SQL数据库开发公众号。今天我们就来说说临时表的优化技巧。临时表,顾名思义,就是临时使用的表。一种是本地临时表,只能在当前查询页面使用。它不能用于新查询。一是无论打开多少查询页都可以使用全局临时表。0.测试环境SQLServer20171.本地临时表本地临时表表名前加#。下面我们来看看本地临时表的特点。让我们创建一个新的查询页面并输入以下代码:SELECTTOP10*INTO#tempFROMsales.Temp_Salesorder;选择*来自#temp;结果如下:让我们打开一个新页面,重新输入以下代码:SELECT*FROM#temp;结果如下:证明本地临时表只能在当前页执行。2.全局临时表全局临时表只需在表名前加##,打开任意查询页面即可使用。重复以上步骤:SELECTTOP10*INTO##tempFROMsales.Temp_SalesorderSELECT*FROM##temp;结果同上:我们打开一个新页面:SELECT*FROM##temp;结果还是一样。证明可以使用全局临时表的所有查询页。3、临时表的优化方法介绍完临时表,我们就来说说如何利用它来优化临时表。临时表的优化一般用在子查询比较多的时候,也叫嵌套查询。我们写如下子查询:SELECT*FROMsales.Temp_SalesorderWHERESalesOrderDetailIDIN(SELECTSalesOrderDetailIDFROMsales.SalesOrderDetailWHEREUnitPriceIN(SELECTUnitPriceFROMsales.SalesOrderDetailWHEREUnitPrice>0))(提示:代码可以左右滑动)这是一个比较简单的二级嵌套子查询,我们来看看theexecution:可以看出这里的逻辑读是比较高的。让我们使用一个临时表来重新访问执行。我们将第一层和第二层的查询结果插入到#temp中,然后从临时表中查询结果。SELECTSalesOrderDetailIDINTO#tempFROMsales.SalesOrderDetailWHEREUnitPriceIN(SELECTUnitPriceFROMsales.SalesOrderDetailWHEREUnitPrice>0)SELECT*FROMsales.Temp_SalesorderWHERESalesOrderDetailIDIN(SELECTSalesOrderDetailIDFROM#temp)执行状态如下:逻辑读次数比上次减少,逻辑读次数减少翻了一番。在调整查询性能时,如果逻辑读值下降,说明查询使用的服务器资源减少,查询性能提高。如果逻辑读取增加,则意味着节流操作正在降低查询的性能。在其他条件不变的情况下,查询使用的逻辑读越少,效率越高,查询速度越快。因此,我们可以看到临时表在更复杂的嵌套查询中可以提高查询效率。