假设有两张表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’该多好)
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’该多好)
B_20130102
..
select * from B partition(p1)
这个有机会使用到B表上的分区。 但仍然要看具体数据分布情况。建议将EXPLAIN SELECT 贴出以供分析。