求教一个数据表的设计问题,比如说,有一个人口与工作单位对应的关系表,比如说一张表里面有人员id,公司id等。人口大概有几亿,一个人的话可能会有好几份工作,这张表会有几十亿的数据。这张表该怎样设计才能使查询效率比较快啊?

解决方案 »

  1.   

    您好:
        对于分区表是不是有这样一个问题,如果按人员id分区的话,他要是进行以公司为条件查询的话还是得全部遍历啊?如果按公司id分区的话,当他以某个人员为条件查询的话是不是也得全部遍历啊?我不知道考虑的对不对。您能帮我说下么?
      

  2.   

    建议分表
    人员表
    人员ID ....公司表:
    公司ID 人员ID ...两表通过人员ID连接记录过多,可以考虑分区表
    人员表按人员ID分区、公司表按公司ID分区
      

  3.   

    这段时间测试了infinidb,感觉比自己分表和分区要好很多
    1.如果分表(纵向),当查询跨越了多个表的时候,必然要用union all拼接SQL,导致查询麻烦
    2.如果分区,要在创建表的时候根据考虑如何纵向分区,当你的数据有几十亿条的时候,分区只能在1024个限制内,这种限制十分麻烦,而且如果不做索引,在跨越多个分区查询的时候效率并不高。
    3.使用infinidb不用分区和创建索引,我测试5000万条数据使用聚合函数查询的时间明显快过MyISAM,甚至只用不到20%的时间。
    所以建议你试试,而且导入数据infinidb提供的cpimport是相当快的,当然,如果你用了load data,那么性能是绝对不能接受的。