我有不能再适合内存的亿行表。如何提高十亿行表上的插入性能?
当我插入散装新行,讲述主索引的开销,杀死的性能。我必须拥有这个索引,否则SELECT语句真的很慢。但是由于插入是随机的,每插入一行,数据就必须写入磁盘的不同区域。
而且,由于HDD以每秒200个IO操作封端的,这减慢了向插入一个抓取。
我可以“有我的鱼和熊掌兼得”在这种情况下,同一时间?也许通过创建另一个表,其中数据按不同的列分组(通过具有不同的主键)?但这似乎浪费了我,我甚至不知道这是否会帮助......
或者,也许我可以利用一些临时表?在那里插入1,000,000行,然后将它们插入目标表,由主键分组?
我注定了吗?
编辑:
我已经水平分区表。
当我除去此字段我需要的主键,把它放在自动增量字段中,插入件是极快的。
不幸的是,因为磁盘上的数据通过主键值放置,这杀死了选择性能......因为选择不查询基础上,自动增量值,而是在PK值。
因此,无论我快速插入行还是快速选择它们。这两种情况下都没有解决方案吗?
你真的使用1b记录的整个表吗?如果没有 - 然后使用[horizontal partitioning](http://en.wikipedia.org/wiki/Partition_%28database%29)并将你的表分成几部分。这取决于你的DBMS(你已经标记了其中的两个) –
你怎么知道'重新计算主索引的开销,杀死了性能'?分区听起来很不错。 –
您使用的是SQL Server还是MySQL?请适当地标记问题。 –