热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlserver处理亿级数据量问题

库里有个表的数据量太大,查询太慢,现需要对表进行拆分,按照年份。这个库是高频库,每5分钟更新3000多条数据,表里数据大概达到1亿多。insertintodbo.T_MIN5_2014
库里有个表的数据量太大,查询太慢,现需要对表进行拆分,按照年份。
这个库是高频库,每5分钟更新3000多条数据,表里数据大概达到1亿多。
insert into dbo.T_MIN5_2014
....  from dbo.T_MIN5
where F_DATE between 20140101 and 20140131   
插入一个月的数据1个小时也没有出来结果。   
怎么解决,求大神,版主

12 个解决方案

#1


查询表的速度就很慢,而且需要拆分的表没有建立索引,只有主键。

#2


单表不行,可用业务表和历史表/历史表用分区表

插入业务表
定时搬动了历史表

历史表数据量大用可分区表去分区

#3


引用 2 楼 roy_88 的回复:
单表不行,可用业务表和历史表/历史表用分区表

插入业务表
定时搬动了历史表

历史表数据量大用可分区表去分区


不用分区表,要求只是把表给拆分,大概每个表数据量能拆分到4000万左右。
现在主要问题是复制数据插入慢,和删除历史表数据慢

#4


用into 生成拆分表
生成表后再创建相关索引

e.g.
select *  into table1 from tablename where ID<=4000

#5


引用 3 楼 weixin_36431009 的回复:
Quote: 引用 2 楼 roy_88 的回复:

单表不行,可用业务表和历史表/历史表用分区表

插入业务表
定时搬动了历史表

历史表数据量大用可分区表去分区


不用分区表,要求只是把表给拆分,大概每个表数据量能拆分到4000万左右。
现在主要问题是复制数据插入慢,和删除历史表数据慢



现在删除原表数据 大概400万条执行了2个半小时  还未完成,取消了,回滚需要多久呢?

#6


T_MIN5表的F_DATE 栏位没有索引吗?没的话加上试试。
然后
1,数据库的恢复模式临时修改为简单模式
2,用SELECT INTO 语句按日期条件分装数据(分装所有数据)
3,全部分装完之后,用TRUNCATE TABLE来将T_MIN5表数据清除,然后DROP掉表T_MIN5
4,将最近的分装表,如T_MIN5_2016表明改回T_MIN5

#7


最后再将数据库恢复模式改回原来的(完整模式?)

#8


采用分区表,历史数据定时分区交换到历史分区表即可。秒级完成。

#9


1建议用导入导出向导,虽然不一定快,但是你可以看到进度
2如果写select 迁移数据建议分成多次执行,比如按日或几日或月,先从一天开始逐渐增加时间跨度,多测试几次就能找出最经济的跨度。
3检查数据库剩余空间,建议先把数据库空间加大而不是登没空间里让它自动增长。
4迁移完成后再给历史表创建索引等
5删除原始表中数据时按照导出时那样分次执行(delete会更慢)


#10


插入之前,先建聚集索引吧,查询快些
删除的时候,先把索引删除,再删除数据,批量啥数据的时候试试下面的sql
SET STATISTICS TIME ON;
DECLARE @Timer DATETIME = GETDATE();

SET ROWCOUNT 100000;

WHILE 1 = 1
BEGIN
BEGIN TRAN
DELETE FROM [dbo].[Employee];
    COMMIT
IF @@ROWCOUNT = 0
BREAK;
END
SET ROWCOUNT 0;

SELECT DATEDIFF(MS, @Timer, GETDATE()) AS [执行时间(毫秒)];
SET STATISTICS TIME OFF;


这样只会记录一条日志,不会每次delete的时候都记录一次日志

#11


别被亿级吓倒,搞清楚数据存储和访问的机制,搞清楚分表、分区的机制、特点是正道

#12


F_DATE 字段上如果没有索引,就创建一个索引。

,初步计算了一下,按照你说的一个月的数据的1000w左右,拷贝1000w的数据确实的比较长时间。

推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
author-avatar
盖世猎人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有