建分区表的话, 要看你有几个磁盘.
如果只有一个磁盘的, 分区来分区去, 最后数据还是在 一个磁盘上面,
如果你有多个磁盘的.
那么可以根据那个 自增 ID , 设置一个 计算列
比如你有5个 磁盘, 那么 那个计算列 是 自增 ID % 5
那么 当 计算列的数值 = 1 , 数据被存储到 磁盘1上面
那么 当 计算列的数值 = 2 , 数据被存储到 磁盘2上面
那么 当 计算列的数值 = 3 , 数据被存储到 磁盘3上面
那么 当 计算列的数值 = 4 , 数据被存储到 磁盘4上面
那么 当 计算列的数值 = 0 , 数据被存储到 磁盘5上面
这种情况,是针对 你插入数据量很大, 瓶颈发生在 磁盘 IO 处理的情况下。
可以提升一定的 插入的性能。
但是看你的那个描述
当记录数据到达1000w之後插入记录就变得很慢
那么我怀疑,可能是 索引处理 花费的时间比较多了
因为你插入一行数据
要更新 表的数据, 同时还有 更新索引的数据
表的数据,更新起来很简单。 索引的更新,需要做一定的计算。
即时你的表,没有任何的索引,但是那个 自增主键, 也是自动要创建索引的。
插数据前把约束 主键 索引什么的 全删掉
插好后 再重建
如果速度还不够快
就把日志关掉 以不记日志的方式 insert。
既然只考虑插入,那么你就要从硬件上来优化了。
比如说你的硬盘,要选用高速写入的硬盘。
如果要是取数据的话,那么就需要把内存加大。等等。
你这个也只能从硬件上解决了
1、尽量缩小每次插入数据行的字节数,例如:文本类型的可以用tinyint类型,或者Smallint类型,或者是Int类型
2、在插入数据的时候,尽量不要使用数据库层面的数据校验,约束和主外键约束。
3、优化查询,尽量使用存储过程,或者使用计划任务认为对此表数据进行定时统计,产生镜像统计表。
4、更换更快的磁盘,例如:固态硬盘或者更快的PCI的硬盘,加快IO读写速度
5、定期清理表中过期数据,形成沉淀数据表
如果只在乎插入,不考虑查询,应该不会下降太多。
表有多少列?有index吗?主键是什么?
是什么系统? oracle? sql server?