分区和子选择

时间:2011-04-03 10:08:49

标签: mysql subquery partitioning

我的分区和子查询有问题(mysql 5.1)。正好在我执行select时使用subselect mysql跳过分区。我不明白为什么。确切地说,我有一个像这样的分区表:

CREATE TABLE parted_table (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
) PARTITION BY KEY() PARTITIONS 20;

查询看起来像:

select * from parted_table where id in (select col_fk from other_table);

并且explain partitions显示上面的select使用所有20个分区,即使此subselect只返回一个值。是否导致mysql在查询优化期间不知道subselect的结果集?

在给定的示例中,我该怎么做才能获得分区?


编辑:我发现了一个正好考虑此问题的错误(http://bugs.mysql.com/bug.php?id=22765)。它是在2008年修复的,但它在mysql 6.0中得到修复:(我读过很多结界从mysql 6.0转移到mysql 5.5。目前我正在努力确认这个特殊的修复程序包含在5.5版本中。

1 个答案:

答案 0 :(得分:0)

如果子查询只返回一行,则可以使用常规连接。该查询将从other_table驱动到parted_table

select *
  from other_table
  join parted_table on(parted_table.id = other_table.col_fk);