Mysql分区和连接

标签 mysql database-partitioning

抱歉,如果这是一个愚蠢的问题,但这是一个新问题,所以需要一些帮助来理解一些事情。我目前正在将 mysql 升级到 5.1,因此我可以在 mysql 中使用分区。我的问题是,如果我对表进行分区,分区表(包括修剪过程)是否仍会使用连接进行查询,或者如果您只是查询具有分区的表,分区是否是最佳的?

编辑

这是一个示例查询:

SELECT event.*,site.* FROM event INNER JOIN site ON event.siteid = site.id
WHERE event.eventdate >= [somedate] AND event.eventdate <= [somedate]
AND event.siteid = [siteid]

而且我使用事件日期字段在事件表上设置了分区。 mysql 是否仍然能够使用事件表上的分区,包括修剪过程?

最佳答案

分区表可用于连接。

调整 where 子句以仅包含一个分区以获得最佳性能。
例如如果按年分区,则可以像这样进行连接:

select * from a
inner join partioned_table p on (p.id = a.id)
where p.year = '2011';

此查询可以使用和不使用 where 子句,但使用 where 子句会更快,因为您只访问一个分区。
如果访问更多分区,MySQL 必须使用临时表将分区拼接在一起才能进行连接。
这种破坏了分区的目的。

关于Mysql分区和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443588/

相关文章:

MySQL 选择指定日期在开始日期和结束日期之间的行

mysql - 从 ibd 文件恢复 *partitioned* mysql InnoDB 表

mysql - 在 mysql 中处理大数据的最佳方法

oracle - 删除两个月以上的分区

mysql - 在 where 子句中使用两组条件

mysql - 具有相同数据的 SQL 中的最大计数 (*) 错误

mysql - 如何开启mysql bin日志

database - Postgres 长时间运行的事务在父分区表上持有锁

MySQL分区注意事项

php - 如何在 MySQL 中选择最新的行?