DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jywl99999
今日帖子: 1
在线用户: 23
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 xbbtzhao (itv) ★☆☆☆☆ -
盒子活跃会员
2019/10/16 15:09:33
标题:
SQL 2008 数据频烦写入与查询,是时间久了就很慢,怎么解决? 浏览:344
加入我的收藏
楼主: 一个设备采集数据表:几百个设备,每产生几十万行的设备状数据,看板又要几秒查询一下所有设备的最近状态,怎么处理我查询最好???
Gdcode  ID  Gdclass  Gdtype  Gdwork  Gdname  p1  p2  p3  P4  Gpcname  Gdate
4  249167  1  2  1  1-4    3,4,  1,2,      2018-09-28 16:39:46.577
6  251330  1  1  1  1-6    1,2,        2018-09-28 14:45:00.830
9  248307  1  2  1  1-9      1,2,3,4,      2018-09-28 16:04:57.070
15  249704  1  1  1  1-15      1,2,      2018-09-28 16:59:41.873
17  214148  1  6  1  1-17      1,2,3,4,      2018-09-25 15:51:13.697
----------------------------------------------
free
作者:
男 gaono1 (晕乎) ▲▲▲▲△ -
注册会员
2019/10/16 15:29:26
1楼: 单独做个设备最近状态表,设备数据采集存入数据库时同时更新该表。看板使用“脏读“查询该设备状态表,不要查历史数据表。
----------------------------------------------
-
作者:
男 xbbtzhao (itv) ★☆☆☆☆ -
盒子活跃会员
2019/10/16 15:47:35
2楼: 写入数据量同时更新表,在代码层上实现还是触发器。
这样查询也,多台查询多也最,;
with tmp as( select (row_number() over(partition by Gdcode order by gdate desc)) as num ,* from Glog2 where Gdwork='''+lwork+''' and Gdclass in ('+lc+') and Gdate BETWEEN dateadd(ss,-1*('+Trtime+'),GETDATE()) and  getdate() )  select * from tmp where num=1
----------------------------------------------
free
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/10/16 16:04:59
3楼: 很多种办法,
1:做内存库,缓存一部分数据,比如缓存每个设备最近10条状态,具体根据你查询设备状态需要的数据量来定,等到缓冲区满了以后再真实写入表中。
2:升级到最新的2016,似乎mssql从2014还是2016开始就有把频繁读写的表缓存在内存中的机制。
3:做中间件,用中间件缓存数据。
4:。。。

反正就是一个原理,做内存缓冲区,这样在你需要查询状态的时候不用去读表,只需要从内存中找数据就行。写入也不需要实时写入,等到缓存到一定数量再写入,有效节约io次数。
----------------------------------------------
--
作者:
男 a5824 (Return) ▲▲▲▲△ -
注册会员
2019/10/16 16:08:12
3楼: 首先脏读,表后面加 With(Nolock),其次建好索引,查询可以改成这样SELECT TOP 100 * FROM DBO.TABLE WITH(NOLOCK) ORDER BY tDateTime Desc
----------------------------------------------
-
作者:
男 doersoft (XMG-ZY) ★☆☆☆☆ -
普通会员
2019/10/17 16:34:23
4楼: 几个方案:
  1.用Socket消息处理,有新数据时方去查询.
  2.如果用的PostgreSQL+UniSQL,数据库貌似带通知功能,就能实现按需查询.

以上,仅供参考.
----------------------------------------------
delphi Flutter&Vue|golang rhinoslink
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行31.25毫秒 RSS