求优化sqlserver语句,使它查询效率提高。(要求:分组查询每组最新的一条数据,数据量非常大,几十万)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求优化sqlserver语句,使它查询效率提高。(要求:分组查询每组最新的一条数据,数据量非常大,几十万)相关的知识,希望对你有一定的参考价值。

我的sql :
select a.* from (
SELECT
row_number() over(partition by t.tunnel_name order by t.CreationDate desc) rn,
t.Id,
t.CreationDate,
t.LastUpdate,
t.tunnel_name,
t.SDMC,
t.DT,
t.DZSC1,
t.DZSC2,
t.DZSC3
FROM
dbo.tunnel_online_monitoring AS t
, dbo.Threshold_ElectronicPool AS i) a where a.rn=1

关于题主的SQL语句提高效率的问题,请留意一下几点

1) 输出的字段列表里只有来自表“dbo.tunnel_online_monitoring ”里的字段信息,没有任何来字段取自表“dbo.Threshold_ElectronicPool”,而且语句也没为这两张表指定连接条件,因此将表“dbo.Threshold_ElectronicPool”引入语句中就没有任何必要,加入该表只会大大增加系统开销,而无得益,应予以剔除;

2)row_number()函数的系统开销是比较大的,能不用尽量别用它。

如果dbo.tunnel_online_monitoring.Id是唯一的,可以不使用row_number()函数,建议语句修改如下:

select Id,CreationDate,LastUpdate,tunnel_name,
SDMC,DT,DZSC1,DZSC2,DZSC3 from 
tunnel_online_monitoring where id in (
select max(a.id) from dbo.tunnel_online_monitoring a,
(select tunnel_name,max(CreationDate) as CreationDate from 
dbo.tunnel_online_monitoring group by tunnel_name) b 
where a.tunnel_name=b.tunnel_name and a.CreationDate
=b.CreationDate group by b.tunnel_name);

如果dbo.tunnel_online_monitoring.Id是自增ID,那么可以根据ID的大小来判定那条记录是最新的,这样就不需要比对时间字段的先后了,语句可简化如下:

select Id,CreationDate,LastUpdate,tunnel_name,
SDMC,DT,DZSC1,DZSC2,DZSC3 from 
tunnel_online_monitoring where id in (
select max(id) from dbo.tunnel_online_monitoring 
group by tunnel_name);

如果dbo.tunnel_online_monitoring.Id不是唯一的,那就还是得利用回row_number()函数了。

参考技术A 请问您最后是怎么解决的呢?

如何做SQL优化?优化SQL语句,提高SQL查询效率。Effective MySQL之SQL语句最优化

 

技术分享图片
SQL优化实战

Effective MySQL之SQL语句最优化是一本提升SQL优化技能不错的书,值得大家学习~~~

Effective MySQL之SQL语句最优化提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助读者分析和调优有问题的SQL语句。

  主要内容:

  ●找出收集和诊断问题必备的分析命令;

  ●创建MySQL索引来改进查询性能;

  ●掌握MySQL的查询执行计划;

  ●找出影响查询执行和性能的关键配置变量;

  ●用SQL语句优化的生命周期来识别、确认、分析然后优化SQL语句,并检查优化的结果;

  ●学习使用不为常人所知的一些性能技巧来改进索引效率并简化SQL语句。

  Effective MySQL之SQL语句最优化 目录:

  第1章 DBA五分钟速成

  第2章 基本的分析命令

  第3章 深入理解MySQL的索引

  第4章 创建MySQL索引

  第5章 创建更好的MySQL索引

  第6章 MySQL配置选项

  第7章 SQL的生命周期

  第8章 性能优化之隐藏秘籍

  第9章 MySQL EXPLAIN命令详解

Effective MySQL之SQL语句最优化手册下载:

下载地址:网盘下载

备用地址:网盘下载

 

 
技术分享图片
SQL优化

以上是关于求优化sqlserver语句,使它查询效率提高。(要求:分组查询每组最新的一条数据,数据量非常大,几十万)的主要内容,如果未能解决你的问题,请参考以下文章

如何对Oracle sql 进行性能优化的调整

求优化一句sql语句,not in速度太慢了

如何做SqlServer 数据查询优化!

在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。

sql语句提高数据库查询效率

提高SQL查询效率(SQL优化)(转载)