假设有两张表A,B通过id关联,
A {id, value1, time}
B {id, value2 }
查询语句:select * from A,B where A.id=B.id and A.time='2013-01-01 00:00:01'现在需要在B表分区,加入字段‘time’做partition的key,
B {id, value, time}
查询的时候,如果按time做查询条件从B表查询,自然没问题
select * from A,B where A.id=B.id and A.time='2013-01-01 00:00:01' and A.time=B.time但是实际上通过id关联已经可以区分,加上B.time只是为了使分区生效,而我们其实并不想引入额外的匹配消耗,是否这样更有效率:
select * from A,B where A.id=B.id and A.time='2013-01-01 00:00:01' and B.time between '2013-01-01 00:00:00' and '2013-01-02 00:00:00'
(between的前后是某个partition分区)或者还有更好的查询方法?(如果mysql有 ‘select from B use partition p1’该多好)

解决方案 »

  1.   

    不如把B按照时间拆分成小表  表的名字是后缀加时间B_20130101
    B_20130102
    ..
      

  2.   

    如果可以通过代码确定使用的partition,可以这样查:
    select * from B partition(p1)
      

  3.   

    但是只能在mysql 5.6上用~~
      

  4.   

    select * from A,B where A.id=B.id and A.time='2013-01-01 00:00:01' and B.time between '2013-01-01 00:00:00' and '2013-01-02 00:00:00'
    这个有机会使用到B表上的分区。 但仍然要看具体数据分布情况。建议将EXPLAIN SELECT  贴出以供分析。