我现在要开发一个业务单据(数据量非常,都会超百万),在建业务单据数据表时涉及到一个是否冗余的问题,就拿主表来说吧。主表中有客户资料信息(客户资料表不会超50万),涉到5,6个字段内容。在建主表时有两种方法,一种是采用冗余客户资料信息,一种是不采用冗余只关联。采用第二种方法,在程序开发时老要关联客户资料表,影响性能。第一种方法,我担心冗余后
数据量大了,查询单表速度还不如关联查询快。现在,在这两种方法中不好决策,不知大家有什么好建议。或者大家能用数据或经验分析出这两种方法的优缺点?!

解决方案 »

  1.   

    这种情况不需要采用冗余方法。
    百万级别的表,并不算大,查询性能不会出问题,个人有几点建议:
    1. 建立合适的索引。
    特别是主表的常用查询列、关联表的关联列。
    2. 优化SQL代码,选择高效的索引。
    在tomcat等容器中对小表进行缓存也是一个好方法。
    3. 控制单次查询返回的结果集。
    可从业务、程序多方面控制单次查询可返回的最大记录数。
    4. 冗余的方法初步看似简单高效,但不利于后期的扩展和保持数据一致性。
      

  2.   

    在数据仓库中,时常需要进行反正规化,允许数据冗余,以加速查询。但是,在 OLTP 数据库中,如果客户信息存在冗余,在修改客户信息时就会涉及到修改多个位置。