`
wsql
  • 浏览: 11811875 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

大数据量下的查找最新的几条数据的通用方法

 
阅读更多

由于项目需要,需要获取一组数据的的最新一条数据,表结构如下:

  1. CREATETABLE[dbo].[WUSU_SUOLITest_Table](
  2. [ID][bigint]IDENTITY(1,1)NOTNULL,
  3. [ReceiveTime][datetime]NULL,
  4. [GroupID][bigint]NOTNULL,
  5. [DataValue][float]NULL,
  6. [SensorCode][char](10)NOTNULL,
  7. )
在这个表上只有两种操作,插入和查询,没有删除和更新。而且同一种设备,随着id列的变大,ReceiveTime也随着变大。
每一个不同的SensorCode代表了一个设备,目前有50个设备,每30秒上报一次数据,ReceiveTime代表上报数据的时间,现在需要获取每一个设备最新一次的数据,

开始我使用如下的查询语句:

  1. select*fromWUSU_SUOLITest_Tablewhereidin(selectmax(id)fromWUSU_SUOLITest_TablegroupbySensorCode)
在数据量比较小时,是没有问题的,但数据量特别大时,这种方式,目前一天的数据就超过了14万,有很大的延时,即使在id上有聚集索引,SensorCode上使用了分区,依然没有多大作用。时间主要花费到了group by上。

实在想不多到什么好的而解决方法,就只能在此表上创建一个触发器,每次插入数据时就把最新的数据放在了一个临时表,又由于临时表最多只有50条数据,速度当然就很好了。

  1. createTRIGGER[dbo].[UpdateWUSU_LastOriginalDataSUOLI]
  2. ON[dbo].[WUSU_SUOLITest_Table]
  3. AFTERINSERT
  4. AS
  5. BEGIN
  6. declare@SensorCodechar(10),@DataValuefloat,@ReceiveTimedatetime,@GroupIDbigint
  7. select@SensorCode=SensorCode,@DataValue=DataValue,@ReceiveTime=ReceiveTime,@GroupID=GroupIDfrominserted
  8. updateWUSU_LastOriginalDatasetDataValue=@DataValue,ReceiveTime=@ReceiveTime,GroupID=@GroupID
  9. whereSensorCode=@SensorCode
  10. END

当然这是为了获取各种设备最新的一条数据,如果要获取最新的两条数据,最多也就是100条记录,一次类推,只需要把上边的触发器修改一下就可以。

但还有没有更好的方式,在不修改表结构的情况下?目前还没有想到。

有人提供了使用关联子查询的方式,确实比group by好多了,但当数据量大时,十天的数据,依然会很慢,大约20多秒。

  1. select*fromWUSU_SUOLITest_Tableast
  2. whereid=(selectmax(id)fromWUSU_SUOLITest_TablewhereSensorCode=t.SensorCode)

讨论贴参考点击打开链接

分享到:
评论

相关推荐

    大数据量下的查找新的几条数据的通用方法

    由于项目需要,需要获取一组数据的的新一条数据,表结构如下: CREATE TABLE [dbo].[WUSU_SUOLITest_Table](  [ID] [bigint] IDENTITY(1,1) NOT NULL,  [ReceiveTime] [datetime] NULL,  [GroupID] ...

    数据大师--通用信息管理系统(单机普通版)

    《数据大师》是专门针对各行政、企事业单位不同管理需求而设计的、独具用户自己量身定制特色且能充分发挥用户管理能力和创造力的傻瓜式通用信息(数据库)管理软件,其主要功能及特点如下: 一.适用范围广: 能...

    计算机应用基础问答题.doc

    注意转换的方法 答:数制是指按每个数位安排几个数字为标准的记数的方法。通常有:二进制、八进制、 十进制、十六进制。 7. 如何使用"开始"按钮? 答:左键打开程序、运行、查找、控制面板等菜单,右键打开资源管理器...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 ... 5.1 变 量 .44 ... 5.2 常 量 .46 ... 8.1 条 件 语 句 .79 ... 8.3 条 件 编 译.90 ... 11.1 方法的声明.124 ...这一天 微软公司正式推出了其下一代...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    DOS 软盘+光盘+U盘+硬盘+NTFS 想拥有更强大的DOS功能??

    (NTFS功能本启动盘已经包括)PQ805-最新的pqmagic的8.05版,DOS下分区的利器,支持200G以上的大硬盘,支持鼠标操作,可执行文件: pqmagic.exe。 SEA-DOS最棒的秀图工具,这个是1.3的注册版,支持鼠标操作,执行...

    Windows 程序设计(第5版)(上、下册)--详细书签版

    10.3.2 安排加速键的几条规则 10.3.3 加速健表 10.3.4 加载加速键表 10.3.5 键盘代码转换 10.3.6 接收加速键消息 10.3.7 菜单与加速键应用程序poppad 10.3.8 启用菜单项 10.3.9 处理菜单项 ...

    会计理论考试题

    A、文件占用的空间变大 B、发生异常蜂鸣声 C、屏幕显示异常图形 D、机内的电扇不转 2. Windows98支持下面___C__网络协议。 A、Net BEUI B、IPX/SPX C、TCP/IP D、Banyan VINES 3.为了方便人们记忆;阅读和编程,...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    把一个对象的数据加以包装并置于其方法的保护之下 称为封装。所谓封装就是对数据的隐藏。封装实现了把数据和操作这些数据的代码包装成为 一个对象(即离散的部件),而数据和操作细节(方法)隐藏起来。如果增加某些...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    Delphi开发范例宝典目录

    实例065 为TListBox添加水平滚动条 77 实例066 将数据库数据添加到组合框中 78 实例067 借助绑定控件实现数据选择录入 79 2.5 TListView控件应用典型实例 80 实例068 TListView列表拒绝添加重复信息 80 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量统计(6) 博客个人文章管理维护...

Global site tag (gtag.js) - Google Analytics