Mysql 表分区和性能

以下内容节选自<Mysql技术内幕InnoDB存储引擎>

mysql表分区:

  分区功能并不是所有存储引擎都支持的,如CSV、MERGE等就不支持。mysql数据库支持的分区类型为水平分区(指一张表中不同行的记录分配到不同的物理文件中),不支持垂直分区(指将同一表中的不同列分配到不同的物理文件中)。此外,mysql数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引。

  当前Mysql数据库支持以下几种类型的分区:

  Range分区:行数据基于一个给定连续区间的列值放入分区。Mysql数据库5.5开始支持Range Columns分区。

  List分区:和Range分区类似,只是List分区面向的是离散的值。Mysql数据库5.5开始支持List Columns分区。

  Hash分区:根据用户自定义的表达式的返回值来进行分区,返回值不能为负数。

  Key分区:根据Mysql数据库提供的哈希函数来进行分区。

分区和性能:

  数据库应用分为两类:一类是OLTP(在线事务处理),如博客、电子商务、网游等;另一类是OLAP(在线分析处理),如数据仓库、数据集市。

  对于OLAP的应用,分区的确可以很好的提高查询性能,因为OLAP应用的大多数查询需要频繁的扫描一张很大的表,如果进行分区则只需要扫描相应的部分即可。

  而对于OLTP应用一般情况下不可能获取一张大表中10%的数据,大部分都是通过索引返回若干记录。对于一张大表,一般的B+树需要2~3次磁盘IO。举个列子,一张数据量为1000万行的表B+树高度为3,将他分为10个区,100万行的B+树高度是2。单独对于Key索引的查询在基于分区设计的情况下查询开销为2次IO,而原表设计需要2到3次IO。而如果对于其他列索引的查询就可能需要10 * 2 = 20次IO。分区查询耗时将远远大于没有进行分区设计数据表的查询耗时。

结论:

  分区并不适用于所有的应用,应该根据实际情况规划自己的分区设计。

时间: 2024-07-30 01:59:33

Mysql 表分区和性能的相关文章

查看Mysql表分区语句

SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA.partitions WHERE TABLE_SCHEMA = schema() AND TABLE_NAME='table'; 查看Mysql表分区语句

MySql表分区(根据时间datetime)

timestamp 类型分区请移步=>MySql表分区(根据时间timestamp)环境: MySql8.0.18(5.6和5.7的未验证) 分区条件的字段类型是datetime完整的sql操作表分区的语句如下: -- 1.删除表 drop table t_test; -- =================================================================================== -- 2.创建一个表并对其分区,被创建分区的字段必须为主

mysql表分区、查看分区

原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的. MYSQL的分区主要有两种形式:水平分区和垂直分区 水平分区(HorizontalPartitioning) 这种形式的分区是对根据表的行进行

mysql 表分区技术

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分.从逻辑上看,只有一张表,但是底层却是由多个物理分区组成. 表分区有什么好处: a.分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备. b.和单个磁盘或者文件系统相比,可以存储更多数据 c.优化查询.在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率:涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果.d.分区表更容易维护.例如:想批量删除大量数据可以清除整个

MySQL 表分区详解

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率.分区的一些优点包括:      1).与单个磁盘或文件系统分区相比,可以存储更多的数据.      2).对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关

MYSQL 表分区的 3 方法

背景知识: 表分区是把逻辑上同一范围的数据保存到同一个文件中,就和超市一样,把同类商品放在同一个区域,把不同的商品放在不同的地方.不同的是超市中 是根据用途分类的,表分区是根据它的取值区间来分的. 分区有什么用? 1.分区后可以用多个文件来保存表中的数据,而这几个文件可以位于不同的硬盘上,这样就可以同时利用多个硬盘的IO能力. 2.分区后锁就会更灵活,如果一次要锁定大量的数据行,而表没有分区,MYSQL 可能会为了减小在锁上的开销,会把行锁升 级为表锁,如果表分区了,要访问的数据行只在表的一两个

mysql表分区(摘自 MySQL表的四种分区类型)

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相

Mysql 表分区

创建分区表: DELIMITER // create table VMMoniterData ( id_ bigint not null AUTO_INCREMENT, vmid varchar(75) null, cpu varchar(75) null, memory varchar(75) null, bpsRead varchar(75) null, bpsWrite varchar(75) null, intranetRX0 varchar(75) null, intranetRX1

mysql表分区案例

0.整理表空间碎片optimize table tablename 1.表分区按年分区,季度子分区 alter table key_part partition by range(year(create_time)) subpartition by hash(quarter(create_time)) subpartitions 4 ( partition p0 values less than (2015), partition p2015 values less than (2016), p