【发布时间】:2016-09-17 07:47:24
【问题描述】:
我知道我们可以明确定义分区修剪。但是,我想知道它是否默认提供。我已经尝试过 MySQL 的官方文档站点。该网站称,“在 MySQL 5.6.8 及更高版本中,使用提供自动分区的存储引擎(例如 MySQL Cluster 使用的 NDB 存储引擎)对所有表禁用分区修剪”。一个快速而中肯的答案和解释将是值得的。
提前致谢
【问题讨论】:
标签: mysql optimization database-design
我知道我们可以明确定义分区修剪。但是,我想知道它是否默认提供。我已经尝试过 MySQL 的官方文档站点。该网站称,“在 MySQL 5.6.8 及更高版本中,使用提供自动分区的存储引擎(例如 MySQL Cluster 使用的 NDB 存储引擎)对所有表禁用分区修剪”。一个快速而中肯的答案和解释将是值得的。
提前致谢
【问题讨论】:
标签: mysql optimization database-design
简短回答:是的。
长答案:注意一些微妙的术语......
InnoDB 没有“自动分区”;必须明确指定分区。 NDB 自动对数据进行分区。
InnoDB 将自动修剪到 WHERE 子句通过“分区键”上的条件隐式指定的分区。
但是,请注意,修剪通常并不比在非分区表上创建一个好的复合索引更好。
我声称只有 4 use cases 其中PARTITIONing 提供任何性能优势。此外,我声称BY RANGE 是唯一有帮助的风味。
如果您想向我们展示您的SHOW CREATE TABLE 和SELECT,我们可以讨论PARTITIONing 是否有任何好处。而且,如果没有好处,为什么。
【讨论】: