【发布时间】:2015-07-07 02:40:08
【问题描述】:
MySQL 如何为分区表创建索引,例如,如果我按 ID 分区创建 5 个哈希:
- 为所有数据创建 1 个全局索引,5 个分区将使用该索引
- 使用 5 个分区表中的子数据创建 5 个分区索引
- 用5个分区表中的所有数据创建5个索引
谢谢
【问题讨论】:
MySQL 如何为分区表创建索引,例如,如果我按 ID 分区创建 5 个哈希:
谢谢
【问题讨论】:
MySQL 中没有分区表的“全局”索引。
您可以放在分区表上的唯一索引最终是每个分区上的单独索引。每个分区实际上都是一个独立的表。
HASH 分区实际上是无用的;你有什么特别的用途,你认为它可能是有益的吗?
附录...
索引的大小类似于表的大小。
由于没有“全局”索引,因此您不能拥有 UNIQUE 键,除非它包含“分区键”的列。也不能使用FOREIGN KEYs。
没有一种类型的索引可以跨越多个表。
【讨论】:
Mysql 中的分区表只支持本地索引。 这意味着什么?表的每个分区都为索引存储自己的 B-Tree。如果您没有分区键作为索引的一部分,这可能会减慢搜索过程。同样对于唯一键约束,您需要添加分区键作为唯一键的一部分。
相对于 Mysql,Oracle 也有全局索引的概念。全球索引很难管理。
我不太确定如果忽略全局索引,Mysql 分区会有多大帮助。
【讨论】:
id,分区键是 created_date,而 WHERE 只有 id between 100 and 500 之类的东西)?然后确实它必须解析与分区一样多的索引,对。但是对于id between 100 and 500 and created_date = $x,created_date 是否在某个索引中无关紧要——由于修剪,只会扫描相关分区。但是,是的,在“计划”时必须考虑到这一点。