有一个系统,每天要向sql server服务器插入10几万条记录,在不考虑查询的情况下怎麼提高效率

2024-12-04 06:39:57
推荐回答(5个)
回答1:

建分区表的话, 要看你有几个磁盘.
如果只有一个磁盘的, 分区来分区去, 最后数据还是在 一个磁盘上面,

如果你有多个磁盘的.
那么可以根据那个 自增 ID , 设置一个 计算列
比如你有5个 磁盘, 那么 那个计算列 是 自增 ID % 5
那么 当 计算列的数值 = 1 , 数据被存储到 磁盘1上面
那么 当 计算列的数值 = 2 , 数据被存储到 磁盘2上面
那么 当 计算列的数值 = 3 , 数据被存储到 磁盘3上面
那么 当 计算列的数值 = 4 , 数据被存储到 磁盘4上面
那么 当 计算列的数值 = 0 , 数据被存储到 磁盘5上面

这种情况,是针对 你插入数据量很大, 瓶颈发生在 磁盘 IO 处理的情况下。
可以提升一定的 插入的性能。

但是看你的那个描述
当记录数据到达1000w之後插入记录就变得很慢
那么我怀疑,可能是 索引处理 花费的时间比较多了
因为你插入一行数据
要更新 表的数据, 同时还有 更新索引的数据
表的数据,更新起来很简单。 索引的更新,需要做一定的计算。
即时你的表,没有任何的索引,但是那个 自增主键, 也是自动要创建索引的。

回答2:

插数据前把约束 主键 索引什么的 全删掉
插好后 再重建
如果速度还不够快
就把日志关掉 以不记日志的方式 insert。

回答3:

既然只考虑插入,那么你就要从硬件上来优化了。
比如说你的硬盘,要选用高速写入的硬盘。
如果要是取数据的话,那么就需要把内存加大。等等。
你这个也只能从硬件上解决了

回答4:

1、尽量缩小每次插入数据行的字节数,例如:文本类型的可以用tinyint类型,或者Smallint类型,或者是Int类型
2、在插入数据的时候,尽量不要使用数据库层面的数据校验,约束和主外键约束。
3、优化查询,尽量使用存储过程,或者使用计划任务认为对此表数据进行定时统计,产生镜像统计表。
4、更换更快的磁盘,例如:固态硬盘或者更快的PCI的硬盘,加快IO读写速度
5、定期清理表中过期数据,形成沉淀数据表

回答5:

如果只在乎插入,不考虑查询,应该不会下降太多。
表有多少列?有index吗?主键是什么?
是什么系统? oracle? sql server?