• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > 记一次sql server 性能调优,查询从20秒至2秒

记一次sql server 性能调优,查询从20秒至2秒

作者:Emrys5的博客 字体:[增加 减小] 来源:互联网 时间:2017-07-22

Emrys5的博客通过本文主要向大家介绍了sql server性能调优,sql server 性能监控,sql server 性能,sql server 性能优化,sql server 2012 性能等相关知识,希望本文的分享对您有所帮助

一、需求

需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑。

先说明一下服务器配置情况:1核CPU、2GB内存、机械硬盘、Sqlserver 2008 R2、Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器。

1、原始表结构

非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的。

2、查询的sql语句为

select *from(
    select *,ROW_NUMBER() OVER (ORDER BY sc desc) as rank  
    from(
        select *,
                case when ( 40-(a.p*(case when a.p > 0 then 1 else -0.5 end)))<=30 
                        then 30 
                     else ( 40-(a.p*(case when a.p > 0 then 1 else -0.5 end))) 
                     end as sc   
        from (
        select * from (
                select a.ProjectNumber, a.ProjectName, a.BaojianNumber, a.BaojianName, a.ToubiaoPerson,
                    sum(UnitPrice) as sumPrice, 
                    b.price as avgPrice, 
                    ((sum(UnitPrice)-b.price)/nullif(b.price,0)*100) as p,
                    sum(case when UnitPrice>b.price then b.price else UnitPrice end )as pprice,
                    sum(case when UnitPrice>MaxPrice then 1 else 0 end ) as countChao
                from ToubiaoDetailTest1 a
                        join (
                            select ProjectNumber, ProjectName, BaojianNumber, BaojianName, avg(price) as price
                            from(
                                select * from(
                                    select ProjectNumber, ProjectName, BaojianNumber, BaojianName, ToubiaoPerson, 
                                        SUM(UnitPrice) as price,
                                        SUM(case when UnitPrice>MaxPrice then 1 else 0 end ) as countChao
                                    from ToubiaoDetailTest1  
                                    group BY ProjectNumber, ProjectName, BaojianNumber, BaojianName, ToubiaoPerson
                                ) tt 
                                where tt.countChao = 0
                            ) t
                            group by ProjectNumber, ProjectName, BaojianNumber, BaojianName
      
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 记一次sql server 性能调优,查询从20秒至2秒

相关文章

  • 2017-05-11SQL Server 移动系统数据库
  • 2017-05-11Win7系统安装MySQL5.5.21图解教程
  • 2017-05-11SQL2005学习笔记 APPLY 运算符
  • 2017-05-11SQL Server 2008 数据库镜像部署实例之一 数据库准备
  • 2017-05-11在sqlserver2005中安装sql server 2000的示例数据库northwind的方法
  • 2017-05-11收缩数据库日志文件的方法(仅适用于mssql2005)
  • 2017-05-11SQLServer2005与SQLServer2008数据库同步图文教程
  • 2017-05-11SQL2005CLR函数扩展-繁简转换的实现代码
  • 2017-05-11解析SQL2005中如何使用CLR函数获取行号
  • 2017-05-11MS-sql 2005拒绝了对对象 'xxx' (数据库 'xxx',架构 'dbo')的 SELECT 权限的解决方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • sql2005开发版 没有任何功能可以安装
    • SQL Sever2008r2 数据库服务各种无法启动问题的解决办法(详解)
    • SQLServer分布式事务问题
    • java实现整数转化为中文大写金额的方法
    • 安装SqlServer2005时版本变更检查 (警告)
    • SQL2005CLR函数扩展-繁简转换的实现代码
    • SQL Server复制需要有实际的服务器名称才能连接到服务器
    • SQL Server2005异地自动备份方法
    • 用jdom创建中文的xml文件的方法
    • SQL Server 2005 开启数据库远程连接的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有