有一个很大数量的表big_table,大约有十亿个数据,而且要经常插入以及查询,在插入时重建索引的时间令人无法接受。所以现在的想法是按照一定的规则分为1万个表small_table_0,small_table_1……,每个表中大约10万个数据,当然,有些表的数据可能达到50万,有些只有1万,每个表中都可能经常插入以及查询。同时再建一个表大约100万条数据index_table,这个表的作用主要是提示哪一类数据放在哪个表中,用唯一主键进行索引。也就是在十亿数据中查询一个数据分两个步骤进行,第一步是在index_table中查询数据放在哪个表中,例如表small_table_1088。第二步就是在small_table_1088中查询数据,有索引。也就是说查询的时候不会用到联合查询,只查询其中的一个表。就算有联合查询,估计也就是一年查个一两次,这个就到时候再想办法了。这样做是否可行?

解决方案 »

  1.   

    这样做还有一个好处就是可以将这些小表分散到不同的服务器中,如果访问量非常大,可以分散到几十台几百台服务器中。这个方法我早就在用了,以前的数据量没有这么大,只有一亿左右,我分为500个表,每个表20万的数据。但是现在由于业务的问题,数据量可能会达到并且超过十亿,所以呢,可能需要分为约一万个表。我以前试过数据库中放置1千个表没有任何性能影响,但是不知道对一万个表有什么影响。数据一旦建成了,再改就很麻烦,所以想问一下。看mssql说明似乎最多可以建立5万多个表。
      

  2.   


    个人感觉,这个不是一个最终的解决办法。 现在是10亿数据。按照lz所说,以后数据增长量在这儿摆着。到达100亿也是有可能的。那时候分成的表,维护起来也是一个可怕的数字。 一般来说到了10亿这个级别的数据,应该有归档的处理了。
    lz可以在这方面多考虑一下。
      

  3.   

    现在使用的数据库还是sql2000,可能分区表适用性不好。
      

  4.   

    SQL2000可以用分区视图,分布式分区视图。每个表到百万级别应该没问题。