让我们比较一下
分区大小
如果您具有以下条件:
- 表格中的1亿行
- BTREE索引
- BTREE中的每个页面拥有1024个密钥
指标是什么样的?
由于LOG(100000000)/ LOG(2)= 26.575424759099,每页树节点具有1024个键的BTREE索引的树高仅为3(CEILING(LOG(100000000)/ LOG(1024)))。在只有三个页面节点的情况下,在每个访问的treenode中对所需密钥进行二进制搜索将导致修剪和隔离大约30个密钥。
分区数
如果您具有以下条件:
- 表格中的1亿行
- BTREE索引
- BTREE中的每个页面拥有1024个密钥
- 您创建1024个分区
数字会略有不同。
每个分区应具有约97656行。指标现在会变成什么?
由于LOG(97656)/ LOG(2)= 16.575421065795,每页树节点具有1024个键的BTREE索引的树高仅为2(CEILING(LOG(97656)/ LOG(1024)))。在只有两个页面节点的情况下,在每个访问的treenode中对所需密钥进行二进制搜索将导致修剪和隔离大约20个密钥。
结论
散布密钥只会删除一个树级别,但实际上会创建1024个索引。查询不会知道区别。对于分区,搜索时间充其量可能是正常的。但是,请确保所有数据都处于活动状态。否则,您可能只击中了几个分区,而其他数据很少访问的分区仅占用了空间,并且从不经常访问以证明该分区合理。您可能需要担心不同的性能指标(例如XFS的内部碎片整理,ext3与ext4等)。您还需要担心使用的是哪个存储引擎,因为:
- 与MyISAM相比,InnoDB索引会有点麻烦,因为它必须管理聚簇索引
- InnoDB会对ibdata1和当前日志文件(ib_logfile0或ib_logfile1)中的数据进行两次写入