Mysql 分区和子选择
我在分区和子查询(mysql 5.1)方面有问题。当我使用subselect执行select时,mysql跳过分区。我不明白为什么。确切地说,我有一个分区表,如下所示:Mysql 分区和子选择,mysql,subquery,partitioning,Mysql,Subquery,Partitioning,我在分区和子查询(mysql 5.1)方面有问题。当我使用subselect执行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
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的结果集
在给定的示例中,我应该如何获得分区
编辑:我发现了一个bug,正是考虑到这个问题()。它在2008年被修复,但在mysql 6.0中被修复:(我读到很多附魔从mysql 6.0迁移到mysql 5.5。目前我正试图确认5.5版中包含了这个特定的修复程序。如果子查询只返回一行,您可以使用常规联接。查询将从
其他\u表
驱动到分开的\u表
)
select *
from other_table
join parted_table on(parted_table.id = other_table.col_fk);
不幸的是,它几乎不会只有一行。在给定的示例中,
parted_table
有1M行,other_table
(也已分区)有2000万行。我决定在两个单独的选择上拆分查询。最终,有了这两个选择,它仍然会非常快(或者说足够快)。