一、分区

 

mysql 一天一分区 mysql分区规则_服务器

mysql 一天一分区 mysql分区规则_服务器_02

mysql 一天一分区 mysql分区规则_MySQL_03

1、MySQL分区允许按设置的规则将各个表的部分分布在整个物理存储中。每个分区存储为单独的单元,非常像一个表。

(1)数据的划分通过分区功能来完成,这在MySQL中可以是针对一组范围或值列表,内部散列函数或线性散列函数的简单匹配。

(2)该函数根据用户指定的分区类型来选择并且使用用户提供的表达式的值。

(3)表达式可以是整数列值或者对一个或多个列值进行操作并返回整数值的函数。

2、

mysql 一天一分区 mysql分区规则_mysql_04

MySQL支持多种类型的分区:

(1)RANGE:范围应该连续但是不重叠,使用VALUES LESS THAN运算符进行定义。

(2)LIST:像在由RANGE进行分区一样,必须显示定义每个分区。

(3)HASH:对要插入表中的行的列值进行操作。

(4)KEY:与HASH类似,不同之处在于仅提供要评估的一个或多个列并且MySQL服务器提供散列函数。适用于所有允许的列类型。

(5)COLUMN:RANGE和LIST分区上的变体。COLUMN分区允许在分区键中使用一个或多个列。在以下情况时考虑这些列:将行放入分区中,以及确定将检查哪些分区来匹配分区删改中的行。

(6)LINEAR:MySQL还支持线性散列,不同于常规散列,线性散列使用线性2的幂算法,而常规散列使用散列函数值的模。

3、分区支持

mysql 一天一分区 mysql分区规则_服务器_05

mysql 一天一分区 mysql分区规则_mysql 一天一分区_06

如果你没有看到partition插件以及status值则你的MySQL不支持分区。

4、使用分区改善性能

mysql 一天一分区 mysql分区规则_mysql_07

mysql 一天一分区 mysql分区规则_服务器_08

 

mysql 一天一分区 mysql分区规则_服务器_09

mysql 一天一分区 mysql分区规则_mysql_10

5、RANGE分区

mysql 一天一分区 mysql分区规则_mysql 一天一分区_11

 

CREATE TABLE orders_range (

id INT AUTO_INCREMENT PRIMARY KEY,

customer_surname VARCHAR(30),

store_id INT, salesperson_id INT,

order_date DATE, note VARCHAR(500)

) ENGINE = InnoDB

PARTITION BY RANGE(id) (

PARTITION p0 VALUES LESS THAN(10000),

PARTITION p1 VALUES LESS THAN(20000),

PARTITION p2 VALUES LESS THAN(30000),

PARTITION p3 VALUES LESS THAN(40000),

PARTITION p4 VALUES LESS THAN(50000)

);

insert into orders_range values(1,'louiz',10,1001,sysdate(),'this is test');

insert into orders_range values(1000,'louiz',10,1001,sysdate(),'this is test');

insert into orders_range values(20001,'louiz',10,1001,sysdate(),'this is test');

insert into orders_range values(30001,'louiz',10,1001,sysdate(),'this is test');

insert into orders_range values(40001,'louiz',10,1001,sysdate(),'this is test');

mysql 一天一分区 mysql分区规则_服务器_12

mysql 一天一分区 mysql分区规则_服务器_13

mysql 一天一分区 mysql分区规则_MySQL_14

mysql 一天一分区 mysql分区规则_mysql 一天一分区_15

6、LIST分区

mysql 一天一分区 mysql分区规则_MySQL_16

CREATE TABLE orders_list (

id INT AUTO_INCREMENT, customer_surname VARCHAR(30), store_id INT,

salesperson_id INT, order_date DATE, note VARCHAR(500),

INDEX idx (id)) ENGINE = InnoDB

PARTITION BY LIST(store_id) (

PARTITION p0 VALUES IN (1, 3, 4, 17),

PARTITION p1 VALUES IN (2, 12, 14),

PARTITION p2 VALUES IN (6, 8, 20),

PARTITION p3 VALUES IN (5, 7, 9, 11, 16),

PARTITION p4 VALUES IN (10, 13, 15, 18)

 );

mysql 一天一分区 mysql分区规则_服务器_17

mysql 一天一分区 mysql分区规则_mysql 一天一分区_18

7、HASH分区

mysql 一天一分区 mysql分区规则_MySQL_19

mysql 一天一分区 mysql分区规则_服务器_20

8、KEY分区

mysql 一天一分区 mysql分区规则_mysql_21

9、子分区

mysql 一天一分区 mysql分区规则_服务器_22

子分区(也称为复合分区)是对分区表中的每个分区进行进一步划分。子分区可以使用HASH、LINEAR HASH、KEY 或 LINEAR KEY 分区。例如,您可以创建新表(类似于orders_range 表),其通过子分区对分区进行进一步操作

10、获取分区信息

mysql 一天一分区 mysql分区规则_mysql_23

mysql 一天一分区 mysql分区规则_mysql_24

mysql 一天一分区 mysql分区规则_服务器_25

mysql 一天一分区 mysql分区规则_mysql 一天一分区_26

mysql 一天一分区 mysql分区规则_mysql 一天一分区_27

mysql 一天一分区 mysql分区规则_服务器_28

mysql 一天一分区 mysql分区规则_MySQL_29

11、更改分区

mysql 一天一分区 mysql分区规则_MySQL_30

12、交换分区

mysql 一天一分区 mysql分区规则_mysql 一天一分区_31

13、删除分区

mysql 一天一分区 mysql分区规则_MySQL_32

mysql 一天一分区 mysql分区规则_MySQL_33

14、使用DROP PARTITION的问题

mysql 一天一分区 mysql分区规则_mysql 一天一分区_34

15、删除分区

mysql 一天一分区 mysql分区规则_mysql_35

ALTER TABLE orders_range REMOVE PARTITIONING;

mysql 一天一分区 mysql分区规则_服务器_36

mysql 一天一分区 mysql分区规则_MySQL_37

二、表维护

1、

执行所请求的操作之后,服务器将返回有关对客户机执行操作的结果的信息。该信息以四列结果集形式显示:

Table:指示对其执行操作的表

Op:指出操作(检查、修复、分析或优化)

Msg_type:指示成功或失败

Msg_text:提供其他信息

mysql 一天一分区 mysql分区规则_MySQL_38

2、

mysql 一天一分区 mysql分区规则_mysql 一天一分区_39

ANALYZE TABLE 特征:

在分析过程中,对于 InnoDB 和 MyISAM,MySQL 使用读取锁来锁定表。

此语句等效于使用 mysqlcheck --analyze。

需要对表有 SELECT 和 INSERT 特权。

支持分区表。还可以使用 ALTER TABLE...ANALYZE PARTITION 检查一个或多个分区

mysql 一天一分区 mysql分区规则_mysql_40

如果自从运行上一个 ANALYZE TABLE 语句后表未发生任何更改,则 MySQL 不会分析该表。默认情况下,MySQL 会将 ANALYZE TABLE 语句写入二进制日志并将这些语句复制到复制从属角色中。禁止使用可选的 NO_WRITE_TO_BINLOG 关键字或其别名 LOCAL 执行日志记录。

mysql 一天一分区 mysql分区规则_mysql_41

3、

mysql 一天一分区 mysql分区规则_mysql 一天一分区_42

CHECK TABLE 特征:对于 MyISAM 表,还将更新键统计信息还可以检查视图是否出现问题,例如视图定义中引用的表不再存在支持分区表。还可以使用 ALTER TABLE...CHECK PARTITION 检查一个或多个分区。

4、

mysql 一天一分区 mysql分区规则_服务器_43

CHECKSUM TABLE 特征:

CHECKSUM TABLE 需要对表有 SELECT 特权。

对于不存在的表,CHECKSUM TABLE 将返回 NULL 并生成警告。

如果使用了 EXTENDED 选项,则将逐行读取整个表,并计算 checksum。

如果使用了 QUICK 选项:

- 将报告实时表 checksum(如果可用);否则将报告 NULL。此操作非常快。

- 通过在创建表时指定 CHECKSUM=1 表选项,对 MyISAM 表启用了实时

checksum。

如果既未指定 QUICK,也未指定 EXTENDED,则 MySQL 将假定为 EXTENDED(CHECKSUM=1 的 MyISAM 表除外)。

mysql 一天一分区 mysql分区规则_服务器_44

checksum 值取决于表中的行格式。如果行格式发生了变化,则 checksum 也会更改。例如,VARCHAR 的存储格式在 MySQL 4.1 之后的版本中有所变化,因此,在将 4.1 表升级到更高版本后,如果表中包含 VARCHAR 字段,则 checksum 值将发生变化。

5、

mysql 一天一分区 mysql分区规则_MySQL_45

optimize语句将优化完全填充的表

mysql 一天一分区 mysql分区规则_MySQL_46

mysql 一天一分区 mysql分区规则_mysql_47

6、

mysql 一天一分区 mysql分区规则_MySQL_48

REPAIR TABLE 特征:

QUICK 选项:尝试仅修复索引文件,而不修复数据文件。此类型的修复与myisamchk --recover --quick 所执行的修复相似。

EXTENDED 选项:MySQL 将逐行创建索引,而不是一次性创建有序索引。此类型的修复与 myisamchk --safe-recover 所执行的修复相似。

USE_FRM 选项不能用于分区表。

需要对表有 SELECT 和 INSERT 特权

支持分区表。还可以使用 ALTER TABLE...REPAIR PARTITION 检查一个或多个分区。

mysql 一天一分区 mysql分区规则_mysql_49

在执行表修复操作之前,最好对表进行备份;在某些情况下,该操作可能导致数据丢失。可能的原因包括(但不仅限于)文件系统错误。

如果服务器在 REPAIR TABLE 操作过程中崩溃,则为避免进一步的损坏,重启之后应立即执行另一 REPAIR TABLE,然后再执行其他任何操作。如果您经常需要使用 REPAIR TABLE 从损坏的表进行恢复,请尝试找出根本原因,以防止相应损坏并避免使用 REPAIR TABLE。

7、

mysql 一天一分区 mysql分区规则_MySQL_50

mysql 一天一分区 mysql分区规则_服务器_51

在某些情况下,mysqlcheck 比直接发出 SQL 语句更加方便。例如,如果提供数据库名称作为其参数,则 mysqlcheck 将确定该数据库所包含的表,并发出语句处理所有这些表。您不需要提供明确的表名称作为参数。此外,由于 mysqlcheck 是命令行程序,因此可以在执行计划维护的操作系统作业中轻松使用该程序。

8、

mysql 一天一分区 mysql分区规则_服务器_52

mysql 一天一分区 mysql分区规则_mysql_53

mysqlcheck 和 myisamchk 均使用多个选项来控制所执行的表维护操作的类型。

--analyze:分析表中键值的分布。通过加快基于索引的查找,这可以提高查询的性能。

--auto-repair:如果检查操作发现了问题,则自动修复出现问题的表。

--check 或 -c:检查表中是否存在问题。如果未指定其他任何操作,则为默认操作。

--check-only-changed 或 -C:跳过表检查(自上一次检查后已更改的表或未正常关闭的表除外)。如果服务器在表打开时崩溃,则会出现后一种情况。

--fast 或 -F:跳过表检查(未正常关闭的表除外)。

--extended、--extend-check 或 -e:运行扩展表检查。对于 mysqlcheck,

将此选项与修复选项结合使用时,将执行比单独使用修复选项时更彻底的修复。即,--repair --extended 执行的修复操作比 --repair 执行的操作更彻底。

--medium-check 或 -m:运行中等表检查。

--quick 或 -q:对于 mysqlcheck,不包含修复选项的 --quick 会导致只检查索引文件,而不检查数据文件。对于这两个程序,将 --quick 与修复选项结合使用都会导致程序只修复索引文件,而不修复数据文件。

--repair、--recover 或 -r:运行表修复操作。

9、

mysql 一天一分区 mysql分区规则_MySQL_54

mysql 一天一分区 mysql分区规则_mysql_55

mysql 一天一分区 mysql分区规则_服务器_56

10、

mysql 一天一分区 mysql分区规则_MySQL_57

三、导入导出数据

mysql 一天一分区 mysql分区规则_mysql_58

1、

mysql 一天一分区 mysql分区规则_服务器_59

可以对 SELECT 语句使用 INTO OUTFILE 子句,将结果集直接写入文件。要以这种方式使用 SELECT,请将 INTO OUTFILE 子句置于 FROM 子句之前。文件名称指示输出文件的位置。MySQL 会将文件写入服务器主机上的指定路径。文件特征

输出文件具有以下特征:

文件将写入服务器主机,而不是通过网络发送到客户机。文件不能已存在。

服务器将在服务器主机上写入新文件。要运行 SELECT … INTO OUTFILE 语句,

必须使用有 FILE 特权的帐户连接到服务器。

MySQL 使用如下权限创建文件:

- 运行 MySQL 进程的帐户将拥有文件。

- 文件对所有用户可读。

针对语句所选的每一行,文件中都包含对应的一行。默认情况下,列值由制表符分隔,而行在换行符处终止。

mysql 一天一分区 mysql分区规则_服务器_60

mysql 一天一分区 mysql分区规则_服务器_61

 

2、

mysql 一天一分区 mysql分区规则_mysql_62

mysql 一天一分区 mysql分区规则_MySQL_63

3、

mysql 一天一分区 mysql分区规则_服务器_64