如何优化SQL语句
这篇文章主要介绍“如何优化SQL语句”,在日常操作中,相信很多人在如何优化SQL语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何优化SQL语句”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、不查多余的列
查询过程中经常为了省事,而直接使用*来代替所有的列,好处是不需要写明列。坏处就是遇到列比较多的表查询效率就大大折扣了。例如:
SELECT * FROM [Sales].[SalesOrderDetail];
我们执行一下可以看到如下信息:
Q:上面的消息界面是怎么出来的呢?
A:点击菜单栏的查询——查询选项...——高级,将SET STATISTICS TIME和SET STATISTICS IO都勾选上就可以了
上面的相关信息我给大家解读一下:
扫描计数:索引或表扫描次数
逻辑读取:数据缓存中读取的页数
物理读取:从磁盘中读取的页数
预读:查询过程中,从磁盘放入缓存的页数
lob逻辑读取:从数据缓存中读取,image,text,ntext或大型数据的页数
lob物理读取:从磁盘中读取,image,text,ntext或大型数据的页数
lob预读:查询过程中,从磁盘放入缓存的image,text,ntext或大型数据的页数
语句的CPU时间分编译阶段和执行阶段。
CPU时间是指:执行语句的时间
占用时间是指:从磁盘读取数据再处理总的使用时间
编译阶段:
SQL Server 分析和编译时间:
执行阶段:
SQL Server 执行时间:
这些信息我们以后都会经常看到的,这是判断一个查询语句最直观的方式。
我们再单独查询一列看会怎么样?例如:
SELECT UnitPrice FROM [Sales].[SalesOrderDetail];
我们执行一下可以看到如下信息:
通过上面的时间对比我们就可以清楚的看到:将列名明确的列出,不显示不相关的列效率有很大的提升。
这里就是大家经常看到的一条优化建议:不要直接使用*进行查询,而只查询需要的列。
当然如果本身有需要查看全表内容,就不在此条优化之列了。
2、不查多余的行
在查询的时候使用WHERE关键字可以很好的过滤掉不需要的行。这也是提高查询效率的一种方式,其实这才是WHERE关键字存在的意义。
例如:
SELECT UnitPrice FROM [Sales].[SalesOrderDetail] WHERE UnitPrice>1000;
我们执行一下可以看到如下信息:
所占用的时间成倍的减少,效果显而易见。
使用DISTINCT关键字减少多余重复的行。
例如:
SELECT DISTINCT UnitPrice FROM [Sales].[SalesOrderDetail] WHERE UnitPrice>1000;
我们执行一下可以看到如下信息:
我们发现,在某些情况下DISTINCT也可以加快数据的查询效率。
到此,关于“如何优化SQL语句”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341