background image

• 历史表快速的查询,可以采用 ARCHIVE+PARTITION 的方式。
• 数据表索引大于服务器有效内存
• 对于大表,特别是索引远远大于服务器有效内存时,可以不用索引,此时分区效率会
更有效。
五,分区实验
实验一:

 

使用 US Bureau of Transportation Statistics 发布的数据(CSV 格式).目前, 

 

包括 1.13 亿条记录,

7.5 GB 数据 5.2 GB 索引。时间从 1987 到 2007。
服务器使用 4GB 内存,这样数据和索引的大小都超过了内存大小。设置为 4GB 原因是数
据仓库大小远远超过可能内存的大小,可能达几 TB。对普通 OLTP 数据库来说,索引缓
存在内存中,可以快速检索。如果数据超出内存大小,需要使用不同的方式。
创建有主键的表,因为通常表都会有主键。表的主键太大导致索引无法读入内存,这样一
般来说不是高效的,意味着要经常访问磁盘,访问速度完全取决于你的磁盘和处理器。目
前在设计很大的数据仓库里,有一种普遍的做法是不使用索引。所以也会比较有和没有主
键的性能。

测试方法:

使用三种数据引擘 MyISAM, InnoDB, Archive.
对于每一种引擘, 

 

创建一个带主键的未分区表 (除了 archive) 和两个分区表,一个按月一

个按年。分区表分区方式如下:
CREATE TABLE by_year (
d DATE
)
PARTITION BY RANGE (YEAR(d))
(
PARTITION P1 VALUES LESS THAN (2001),
PARTITION P2 VALUES LESS THAN (2002),
PARTITION P3 VALUES LESS THAN (2003),
PARTITION P4 VALUES LESS THAN (MAXVALUE)
)
CREATE TABLE by_month (
d DATE
)
PARTITION BY RANGE (TO_DAYS(d))
(
PARTITION P1 VALUES LESS THAN (to_days(‘2001-02-01′)), — January
PARTITION P2 VALUES LESS THAN (to_days(‘2001-03-01′)), — February
PARTITION P3 VALUES LESS THAN (to_days(‘2001-04-01′)), — March
PARTITION P4 VALUES LESS THAN (MAXVALUE)
)

 

每一个都在 mysql 服务器上的单独的实例上测试, 每实例只有一个库一个表。每种引擘, 都
会启动服务, 运行查询并记录结果, 然后关闭服务。服务实例通过 MySQL Sandbox 创建。
加载数据的情况如下: