mysql 创建分区索引吗_mysql创建分区索引

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

mysql创建分区索引

(一)分区表:

把所有的数据放在一个表中,但是物理存储数据会根据一定规则存放到不同的文件中

(二)什么时候使用分区表?

数据比较大时候,数以亿记或者数以TB记的数据,如果使用索引在空间和维护消耗巨大,甚至索引没有效果了.

例子:

查看是否支持分区

show variables like '%partition%';

创建一个普通表

create table no_part_tab(

id int not null,

username varchar(50) not null,

d_date date not null

)

创建存储过程插入数据

DELIMITER #

CREATE PROCEDURE no_part_tab_pro()

BEGIN

DECLARE i INT;

SET i=1;

WHILE i<=10000 DO

INSERT INTO no_part_tab VALUES(i, CONCAT('no_part',i), ADDDATE('2007‐01‐01', (RAND(i)*36520)MOD 3652));

SET i=i+1;

END WHILE;

END#

CALL no_part_tab_pro();

创建一个分区表

CREATE TABLE part_tab(

id INT NOT NULL,

username VARCHAR(50) NOT NULL,

d_date DATE NOT NULL)

PARTITION BY RANGE(YEAR(d_date))(

PARTITION p0 VALUES LESS THAN(2007),

PARTITION p1 VALUES LESS THAN(2008),

PARTITION p2 VALUES LESS THAN(2009),

PARTITION p3 VALUES LESS THAN(2010),

PARTITION p4 VALUES LESS THAN(2011),

PARTITION p5 VALUES LESS THAN(2012),

PARTITION p6 VALUES LESS THAN(2013),

PARTITION p7 VALUES LESS THAN(2014),

PARTITION p8 VALUES LESS THAN(2015),

PARTITION p9 VALUES LESS THAN(2016),

PARTITION p10 VALUES LESS THAN maxvalue

PARTITION p10 VALUES LESS THAN maxvalue

);

创建存储过程插入数据

DELIMITER #

CREATE PROCEDURE part_tab_pro()

BEGIN

DECLARE i INT;

SET i=1;

WHILE i<=10000 DO

INSERT INTO part_tab VALUES(i, CONCAT('no_part',i), ADDDATE('2007‐01‐01', (RAND(i)*36520) MOD 3652));

SET i=i+1;

END WHILE;

END#

CALL part_tab_pro();

分别查询两个表中数据,使用explain partitions

explain partitions select * from no_part_tab where d_date>DATE '2007‐01‐01' AND d_date

EXPLAIN PARTITIONS SELECT * FROM part_tab WHERE d_date>DATE '2007‐01‐01' AND d_date

(三)常见的分区:

1.range分区

2.list分区:

CREATE TABLE list_tab(

id INT NOT NULL,

username VARCHAR(20) NOT NULL

)

PARTITION BY LIST(id)(

PARTITION p0 VALUES IN(1,2,3), #区间值不能重复

PARTITION p1 VALUES IN(4,5,6)

)

3.hash分区

CREATE TABLE hash_tab(

id INT NOT NULL,

username VARCHAR(20) NOT NULL

)

PARTITION BY HASH(id)

PARTITIONS 4;

4.key分区

CREATE TABLE key_tab(

id INT NOT NULL,

username VARCHAR(20) NOT NULL

)

PARTITION BY KEY(id)

PARTITIONS 3;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值