SQL优化:不查询多余的列和行
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
示例数据库可以在阅读原文处获取。下面使用的示例是AdventureWorks2012的备份包,小伙伴下载后还原即可。记得数据库要是高版本的才能还原成功,我使用的数据库是SQL Server 2016版本的。 1.不查询多余的列 查询过程中经常为了省事,而直接使用*来代替所有的列,好处是不需要写明列。坏处就是遇到列比较多的表查询效率就大大折扣了。例如:
我们执行一下可以看到如下信息: 上面的相关信息我给大家解读一下: 扫描计数:索引或表扫描次数 逻辑读取:数据缓存中读取的页数 物理读取:从磁盘中读取的页数 预读:查询过程中,从磁盘放入缓存的页数 lob逻辑读取:从数据缓存中读取,image,text,ntext或大型数据的页数 lob物理读取:从磁盘中读取,image,text,ntext或大型数据的页数 lob预读:查询过程中,从磁盘放入缓存的image,text,ntext或大型数据的页数 语句的CPU时间分编译阶段和执行阶段。 CPU时间是指:执行语句的时间 占用时间是指:从磁盘读取数据再处理总的使用时间 编译阶段: SQL Server 分析和编译时间: 执行阶段: SQL Server 执行时间: 这些信息我们以后都会经常看到的,这是判断一个查询语句最直观的方式。 Q:上面的消息界面是怎么出来的呢? A:点击菜单栏的查询——查询选项...——高级,将SET STATISTICS TIME和SET STATISTICS IO都勾选上就可以了 我们再单独查询一列看会怎么样?例如:
我们执行一下可以看到如下信息: 通过上面的时间对比我们就可以清楚的看到:将列名明确的列出,不显示不相关的列效率有很大的提升。 这里就是大家经常看到的一条优化建议:不要直接使用*进行查询,而只查询需要的列。 2.不查询多余的行
我们执行一下可以看到如下信息: 所占用的时间成倍的减少,效果显而易见。
我们执行一下可以看到如下信息: 可能有些同学对DISTINCT关键字有不同的看发,稍后我们根据具体情况再逐一给大家进行分析。 今天的课就讲到这里,小伙伴可以动手尝试一下。 阅读原文:原文链接 该文章在 2025/6/23 12:51:27 编辑过 |
关键字查询
相关文章
正在查询... |