0
我有一个分区和子查询(mysql 5.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
表明,上述选择使用所有20个分区,即使该子查询只返回一个值。在查询的最优化过程中,mysql是否不知道子查询的结果集?
我该怎么做才能在给定的例子中进行分区?
编辑:我发现了一个bug正是考虑这个问题(http://bugs.mysql.com/bug.php?id=22765)。它在2008年得到了修复,但它在mysql 6.0中被修复了:(我读了很多附魔从mysql 6.0移到了mysql 5.5,此刻我试图确认这个特定的修复包含在ver.5.5中。
不幸的是,几乎没有将只是一个一行,在给定的例子'parted_table'有1M行,'other_table'(也是分区的)有20M行,我决定把查询分成两个独立的选择,最后,这两个选择仍然会很快(或者足够快)。 – emstol 2011-04-04 06:49:49