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

SQL优化并不“多余”

时间:2023-03-20 13:16:12 科技观察

本文转载自微信公众号《SQL数据库开发》,作者,平凡的世界。转载本文请联系SQL数据库开发公众号。有很多方法可以优化SQL。今天介绍两种简单但非常实用的方法:不要查询多余的行和列。可能很多朋友都知道这两种方法,但是为什么要这样做,可能还是不太清楚。让我们看看相关的例子来给你具体的解释。1、不要勾选多余的列。为了在查询过程中省事,常用*来代替所有的列。优点是不需要指定列。缺点是遇到列数较多的表时,查询效率会大大降低。例如:SELECT*FROM[Sales].[SalesOrderDetail];执行后我们可以看到如下信息:问:上面的消息界面是怎么出来的?A:点击菜单栏中的Query——QueryOptions...——Advanced,SETSTATISTICSTIME和SETSTATISTICSIO都勾选即可。解释一下上面的相关信息:scancount:索引或表扫描的次数Logicalread:读入数据缓存的页数Physicalread:从磁盘读出的页数Readahead:在查询过程中,从磁盘lob放入缓存的页数逻辑读:从数据缓存中读取的页数,图片,文本,ntext或大数据lob物理读取:从磁盘读取,图片,文本,图片的页数,ntextorlargedatalobread-ahead:在查询过程中,image、text、ntext或largedata从磁盘放入缓存的页数语句编译阶段和执行阶段的CPU时间。CPU时间是指:执行语句的时间占用时间是指:从磁盘读取数据然后处理的总使用时间编译阶段:SQLServer分析编译时间:执行阶段:SQLServer执行时间:我们会经常以后看这个信息是的,这是判断一个查询语句最直观的方法。如果我们单独查询一列会发生什么?例如:SELECTUnitPriceFROM[Sales].[SalesOrderDetail];执行后可以看到如下信息:通过上面的时间对比,我们可以清楚的看到:列名清晰,不显示不相关的列是效率上的一大提升。这里有一个大家经常看到的优化建议:不要直接用*去查询,只查询需要的列。当然,如果需要查看全表内容,则不在本次优化之列。2.不检查冗余行查询时使用WHERE关键字,过滤掉不需要的行。这也是一种提高查询效率的方法。其实这就是WHERE关键字存在的意义。例如:SELECTUnitPriceFROM[Sales].[SalesOrderDetail]WHEREUnitPrice>1000;执行后可以看到如下信息:耗时成倍减少,效果明显。使用DISTINCT关键字来减少冗余的重复行。例如:SELECTDISTINCTUnitPriceFROM[Sales].[SalesOrderDetail]WHEREUnitPrice>1000;执行后我们可以看到如下信息:我们发现在某些情况下DISTINCT还可以加快数据的查询效率。