mysql分区相关文章:
1.这篇文章测试了mysql分区在大数据量情况下,在不同的表引擎下的性能比较,也说明了在索引大小大于内存时,索引扫描比全表扫描要慢。http://dev.mysql.com/tech-resources/articles/testing-partitions-large-db.html
2.这篇文章介绍了表分区(水平分区和垂直分区),http://dev.mysql.com/tech-resources/articles/performance-partitioning.html
3.这篇文章说明了利用日期列对mysql分区时,怎样用分区函数才能使用partition pruning,http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitioning_with_dates.html
4.http://www.mysqlab.net/blog/2009/12/mysql-55-表分区功能增强/
5.这篇文章说明了mysql可以按多列进行分区,http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html
从以上几篇文章中可以得到以下几种结论:
(1)使用mysql optimizer可以优化的日期函数to_days,year
(2)表列过多影响count(*)的效率[垂直分区]
(3)不同的存储引擎支持不同的索引策略
(4)在索引大小大于内存时,索引扫描比全表扫描要慢,因此大数据量时有时索引未必好
(5)mysql可以对相应的查询只访问相关的分区
(6)mysql分区表创建示例
mysql> CREATE TABLE part_date4 -> ( c1 int default NULL, -> c2 varchar(30) default NULL, -> c3 date default NULL) engine=myisam -> PARTITION BY RANGE (year(c3)) -> (PARTITION p0 VALUES LESS THAN (1995), -> PARTITION p1 VALUES LESS THAN (1996) , -> PARTITION p2 VALUES LESS THAN (1997) , -> PARTITION p3 VALUES LESS THAN (1998) , -> PARTITION p4 VALUES LESS THAN (1999) , -> PARTITION p5 VALUES LESS THAN (2000) , -> PARTITION p6 VALUES LESS THAN (2001) , -> PARTITION p7 VALUES LESS THAN (2002) , -> PARTITION p8 VALUES LESS THAN (2003) , -> PARTITION p9 VALUES LESS THAN (2004) , -> PARTITION p10 VALUES LESS THAN (2010), -> PARTITION p11 VALUES LESS THAN MAXVALUE );
(7)所有的引擎都支持分区
(8)每个分区对应相应分区的索引,比如:一个表有10个分区,那么分区对应10个索引
(9)分区类型:range,list,hash,key,并且支持子分区
(10)myisam,innodb,archive三者比较,相同情况下
所占空间:innodb>myisam>archive
分区表扫描速度:myisam>archive>innodb,但archive所占空间比myisam小很多(大概80%-90%),而且速度不比myisam慢多少。
(11)mysql可以按多列进行分区
(12)利用explain partitions进行查询解释