sql server 性能调优,查询从20秒至2秒
《sql server 性能调优,查询从20秒至2秒》要点:
一、需求 需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑. 先说明一下服务器配置情况:1核CPU、2GB内存、机械硬盘、Sqlserver 2008 R2、Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器. 1、原始表结构 非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的. 2、查询的sql语句为 此段sql语句主要的功能是: 1、根据ProjectNumber,ProjectName,BaojianNumber,BaojianName,ToubiaoPerson分组,查询所有数据的sum(UnitPrice) 其中UnitPrice>MaxPrice的判断是为了逻辑,如果有一条数据满足,则此分组所有的数据不查询. 2、根据ProjectNumber,BaojianName 分组,查询所有数据的avg(price),以上两步主要就是为了查询根据ProjectNumber,BaojianName分组的avg(price)值. 3、然后根据逻辑获取相应的值、分数和按照分数排序分页等等操作. 二、性能调优 在未做任何优化之前,查询一次的时间大约为20秒左右. 1、建立索引 根据sql语句我们可以知道,会根据5个字段(ProjectNumber,ToubiaoPerson)进行分组聚合,所以尝试添加非聚集索引idx_calc. 在索引键列添加ProjectNumber,ToubiaoPerson.如图: 然后执行查询sql语句,发现执行时间已经减半了,只要10610毫秒. 2、索引包含列 分析查询sql可以得知,我们需要计算的值只有UnitPrice和MaxPrice,所以想到把UnitPrice和MaxPrice添加到idx_calc的包含列中.如图
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Mysql实例mysql 5.7.18 winx64密码修改
- mysql – SQL:选择行不在同一个表中的条件的事务
- Mysql应用Mysql实时备份实现方法
- Mysql实例mysql not in、left join、IS NULL、NOT EXISTS 效
- php – 如何在一行中显示SQL查询结果?
- 将mysql查询应用于数据库中的每个表
- MYSQL教程ERROR: Error in Log_event::read_log_event()
- Mysql必读MySQL ALTER命令使用详解
- javascript – 尝试调查页面加载性能错误:什么是“脚本”
- MYSQL数据库MySQL OOM 系列一 Linux内存分配