百度 MTC 百万测试基金极速抢
»  澳门葡萄京官方网站 1

为了更好的演示range分区,首先对mysql server的启动和关闭进行说明:

MySQL官网有这样一句话:

雅虎开源数据库分区表管理器 MySQL Partition Manager ,你可在
GitHub
查看它的源码。

 

As of MySQL 5.7.17, the generic partitioning handler in the MySQL
server is deprecated, and is removed in MySQL 8.0, when the storage
engine used for a given table is expected to provide its own
partitioning handler. Currently, only the InnoDB and NDB storage
engines do.

雅虎内容管理大量的 MySQL
数据库,它们分布在不同的数据中心。在有数千个数据库,每个数据库有大量的分区表。为了高效地创建和维护分区表,他们开发了这个分区管理器,以最低的预配置来自动管理分区。

一,如何启动mysqld?

大意为MySQL
8.0中将会移除普通的分区而只支持存储引擎内置分区的方式。如下文所示,即为普通的分区方式:

雅虎数据库工程团队还在 blog
表示,他们将与
MySQL 社区保持的互动,并开发出更多特性。

 

CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR NOT NULL DEFAULT '', email VARCHAR NOT NULL DEFAULT '' ) PARTITION BY HASH  PARTITIONS 4 ( PARTITION p0 DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx', PARTITION p2 DATA DIRECTORY = '/data4/data' INDEX DIRECTORY = '/data5/idx', PARTITION p3 DATA DIRECTORY = '/data6/data' INDEX DIRECTORY = '/data7/idx' );

转自:
   

       
本人把mysql安装在windows环境下,安装的主目录homedir是”c:Program
Files
MySQLMySQL Server
5.1″,启动方法非常简单:首先进入cmd命令行窗口,如下图:

这里我们可以有一个最基本的判断逻辑,假如数据库表没有指定存储引擎,即可认为是MySQL不建议使用的分区方式。当在5.7版本中使用时,MySQL将提示:

 

The partition engine, used by table ‘table_name’, is deprecated
andwill be removed in a future release. Please use native partitioning
instead.

    澳门葡萄京官方网站 2    

用户在这时为数据库表指定存储引擎InnoDB或NDB即可。

         执行如下命令:cd  c:Program FilesMySQLMySQL Server
5.1,进入mysql安装目录,
可以看到bin目录,该目录是存放mysql的各种可执行文件,cd bin,进入该目录,

ALTER TABLE table_name ENGINE = INNODB;

澳门葡萄京官方网站, 

  • 分区使得可以将一个表中的更多数据存储在单个磁盘或文件系统分区上。
  • 由于满足给定WHERE子句的数据只能存储在一个或多个分区上,因此可以将搜索中的剩余分区自动排除,可以大大优化一些查询。
  • 此外,MySQL 5.7支持查询的显式分区选择。 例如,SELECT * FROM t
    PARTITIONWHERE c <5仅选择与WHERE条件匹配的分区p0和p1中的那些行。
    在这种情况下,MySQL不会检查表t的任何其他分区;
    当您已经知道要检查的分区或分区时,这可以大大加快查询速度。
  • 涉及聚合函数和COUNT()的查询可以轻松并行化。
  • 凭借扩展数据实现更大的查询吞吐量,可以查找多个磁盘。

找到mysqld.exe的可执行文件,执行mysqld,即启动mysqld,如下图:

对用户而言,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象(Handler
Object)的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。所以分区对于SQL层来说是一个完全封闭底层实现的黑盒子,对应用是透明的,但是从底层的文件系统也就很容易发现,每个分区表都有一个使用#分隔命名的表文件。在下面的场景中,分区可以起到非常大的作用:

  www.2cto.com  

  • 表非常大以至于无法全部放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据。
  • 分区表的数据更容易维护。例如,想批量删除大量数据可以使用清除整个分区的方式
  • 分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。
  • 可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问、ext3文件系统的inode锁竞争等。

澳门葡萄京官方网站 3       
 此时,打开任务管理器 – 》进程,可以看到mysqld.exe,表示启动成功。

分区表本身也有一些限制:

 

  • 一个表最多只能有1024个分区
  • 在MySQL5.1中,分区表达式必须是整数,或者是返回整数的表达式。在MySQL5.5中,某些场景中可以直接使用列表来进行分区。
  • 如果分区字段中有主键或者唯一索引的列,那么
    所有主键列和唯一索引列都必须包含进来
  • 分区表中无法使用外键约束。

澳门葡萄京官方网站 4         

分区表由多个相关的底层表实现,这些底层表也是由句柄对象(Handler
object)表示,所以我们也可以直接访问各个分区。存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层表上各自加上一个完全相同的索引。从存储引擎的角度来看,底层表和一个普通表没有任何不同,存储引擎也无须知道这是一个普通表还是分区表的一部分。分区表的操作逻辑:SELECT查询当查询一个分区表的时候,分区表先打开并锁住所有的底层表,优化器先判断是否可以过滤部分分区,然后再调用对应的存储引擎访问各个分区的数据。INSERT操作当写入一条记录时,分区层先打开并锁住所有的底层表,然后确定哪个分区接受这条记录,再将记录写入对应底层表。DELETE操作当删除一条记录时,分区层先打开并锁住所有的底层表,然后确定数据对应的分区,最后对相应底层表进行删除操作。UPDATE操作当更新一条记录时,分区层先打开并锁住所有的底层表,MySQL先确定需要更新的记录在哪个分区,然后取出并更新,再判断更新后的数据应该放在哪个分区,最后对底层表进行写入操作,并对原数据所在的底层表进行删除操作。

 

MySQL支持多种分区表。用的最多的是根据范围进行分区;还支持键值、哈希和列表分区。

二,如何关闭mysqld?

例,根据范围进行分区:CREATE TABLE sales ( id INT AUTO_INCREMENT, amount DOUBLE NOT NULL, order_day DATETIME NOT NULL, PRIMARY KEY(id, order_day)) ENGINE=Innodb PARTITION BY RANGE(YEAR(order_day)) ( PARTITION p_2010 VALUES LESS THAN , PARTITION p_2011 VALUES LESS THAN , PARTITION p_2012 VALUES LESS THAN , PARTITION p_catchall VALUES LESS THAN MAXVALUE);

 

  • NULL值会使过滤无效
  • 分区列和索引列不匹配
  • 选择分区的成本可能很高
  • 打开并锁住所有底层表的成本可能很高
  • 维护分区的成本可能很高

        运行cmd,将路径切换到:c:Program FilesMySQLMySQL Server
5.1bin下,用命令 

使用分区表的限制:

        mysqladmin -u root -p shutdown

  • 所有分区都必须使用相同的存储引擎
  • 分区函数中可以使用的函数和表达式也有一些限制
  • 某些存储引擎不支持分区
  • 对于MyISAM的分区表,不能再使用LOAD INDEX INTO CACHE操作
  • 对于MyISAM表,使用分区表时需要打开更多的文件描述符。

 

  1. 《高性能MySQL》
  2. MySQL分区
  3. 原文链接

        如下图所示:

 

      澳门葡萄京官方网站 5

 

三,innodb_file_per_table设置

 

        mysql innodb
存储引擎对表空间的管理在默认情况下是使用共享表空间,
即所有表的索引和数据均放在一个以ibdata1的文件中,我们可以执行下面的命令查看:

 

澳门葡萄京官方网站 6      

        可以看到对应的Value:
OFF,下面我们在配置文件my.ini增加下面一行:

 

        #tenfy: 新添加的参数

        innodb_file_per_table=1

  www.2cto.com  

        然后,重新启动mysqld,此时,可以看到:

 

澳门葡萄京官方网站 7  

       
 那么,你也许会问,之前在innodb_file_per_table=0的时候已经创建的表,
此时还是继续使用共享表空间吗?是的,如果我们不对表进行修改,之前的可以继续使用,但

 

       
 将共享表空间修改成独立表空间,除了修改innodb_file_per_table参数外,
我们需要修改所有innodb的表都运行如下:

 

         alter table table_name engine=innodb;
(tenfy:注意红色部分必须添加,
否则无法生效),一旦执行完成后,我们可以在data的mytest1目录下,看到根据各个分区
生成的各个.ibd后缀的文件,这些文件就是独立表空间文件,每个分区对应一个。
(关于分区我们将在下面讲解)
 

澳门葡萄京官方网站 8

 

四,mysql分区概述

 

     
 分区功能并不是在存储引擎层完成的,因此除了innodb支持分区外,MyISAM,NDB
等均支持分区功能,而CSV,FEDERATED,MERGE则不支持分区功能。而MySQL在5.1版本时
添加了对分区功能的支持。

 

     
分区是将一个表或者索引物分解成多个更小的,更可管理的部分,而对用户访问db的应用来说,
从逻辑上看,只有一个表或者一个索引(这里跟分库分表的访问不一样),但在物理上这个表或者
索引可能是由许多个物理分区组成的,每个分区都是一个独立的对象,可以进行独立处理。

  www.2cto.com  

     
那么怎么判断当前数据库是否启用了分区功能呢?可以执行如下命令进行查看:

 

澳门葡萄京官方网站 9

 

      或者:

      澳门葡萄京官方网站 10

 

       当前MySQL支持以下几种分区:

 

     
 1,RANGE分区:顾名思义,区间分区,行数据基于一个给定连续区间的列值放入分区。

 

     
 2,LIST分区:列表分区,与RANGE分区类似,只是LIST分区面向的是离散可列举的值。

 

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

 

       4,KEY分区:根据MySQL数据库提供的哈希函数进行分区。

 

       但是不论什么类型的分区,必须注意以下两个问题:

 

      1,如果表中存在primary key 或者unique key时,分区的列必须是primary
key或者
unique
key的一个组成部分,也就是说,分区函数的列只能从pk或者uk这些key中取子集。
 www.2cto.com  

 

       如下:

      澳门葡萄京官方网站 11

 

     
表par_tb1有唯一key,他们对应的列是col1,col2。而此时进行分区的列却是col3,
因此出现1503错误,此时我们把col3加入到unique
key或者用col1或者col2进行分区均

 

      没问题:

澳门葡萄京官方网站 12      

      2,如果表中不存在任何的primary key或者unique
key,则可以指定任何一个列作为分区列。

 

五,RANGE分区。

 

       
RANGE分区是最常用的一种分区类型,它的特点主要是按照某个列连续的值进行分区,
因此在分区中常常使用values less than (xxx),下面我们以具体的例子来说明。

 

       
首先我们创建一个表,名字叫:range_par_tbl,有一个int类型的id字段,当id小于10的
时候,插入第一个分区,当id小于20的时候插入第二分区。如下:

 澳门葡萄京官方网站 13       

       
此时,我们查看对应的分区表空间文件(注意:因为我们之前设置了innodb_file_per_table=1),
此时启用分区后,表已经由建立分区时的各个分区ibd文件组成了,由于我们分了两个区,
因此可以看到对应的两个文件:  www.2cto.com  
 

 澳门葡萄京官方网站 14       

 

        可以看到,分区对应的表空间文件命名规则为:表名

server的启动和关闭进行说明: 一,如何启动mysqld?
本人把mysql安装在windows环境下,安装的主目录ho…

共2页:上一页12下一页

相关文章

相关搜索:

今天看啥

搜索技术库

返回首页

  • IOS
    阶段学习第九天笔记(内存管理),ios第
  • PHP-MYSQL中文乱码问题.,
  • CentOS7下源码安装mysql5.6,centos7mysql5.6
  • CentOS7 (64位) 下QT5.5 连接MySQL数据库(driver
    n
  • iOS开发-文件管理之多的是你不知道的事(二
  • iOS开发-文件管理之多的是你不知道的事(一

相关频道:
oracle  sybase  Sql
Server  DB2  Mysql  MsSql  Access  数据库开发  数据库管理  数据库前沿  数据库教程  数据库工具  数据库安全  数据库基础