我对分区和子查询(MySQL5.1)有问题。确切地说,当我使用子select执行select时,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个分区,即使这个子select只返回一个值。是因为mysql在优化查询时不知道子subselect的结果集吗?
在给定的示例中,我应该做什么来获得分区?
编辑:,考虑到这个问题,我发现了一个错误(http://bugs.mysql.com/bug.php?id=22765)。它是在2008年修复的,但在MySQL6.0中是固定的:(我读到很多魔法都是从MySQL6.0移到MySQL5.5的。目前,我正试图确认这个特定的修复程序是否包含在ver中。5.5。
发布于 2011-04-03 20:30:48
如果子查询只返回一行,则可以使用常规联接。查询将从other_table驱动到parted_table。
select *
from other_table
join parted_table on(parted_table.id = other_table.col_fk);https://stackoverflow.com/questions/5528920
复制相似问题