数据库分片一篇就够了

数据库分区

概述

什么是数据分区

  • mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),在innoDB擎中,一张表主要对应着二个文件,一个是frm存放表结构的,一个是ibd 存放数据和索引的。如果一张表的数据量太大的话,那么ibd文件就会变的很大,查找数据就会变的很慢。
  • 这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去。

分区的二种方式

  • 横向分区

    举例来说明,假如有100W条数据,分成十份,前10W条数据放到第一个分区,第二个10W条数据放到第二个分区,依此类推。也就是把表分成了十分,而表的结构并没有变化。

  • 纵向分区

    举例来说明,在设计用户表的时候,开始的时候没有考虑好,而把个人的所有信息都放到了一张表里面去,这样这个表里面就会有比较大的字段,分区的时候,可以把这样的大字段,分开来。将一张表变成两张表来处理。

分区类型

Range分区

​ Range分区最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段,基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。

查看data存放目录
SHOW VARIABLES LIKE '%datadir%';
创建分区
CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `access_time` datetime NOT NULL,
  PRIMARY KEY (`id`,`access_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(access_time))
(PARTITION p1 VALUES LESS THAN (to_days(20190101)) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (to_days(20190102)) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (to_days(20190103)) ENGINE = InnoDB) */;
 
 
-- 或者
CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `access_time` datetime NOT NULL,
  PRIMARY KEY (`id`,`access_time`)
) 
PARTITION BY RANGE (TO_DAYS(access_time) ) (
    PARTITION p1 VALUES LESS THAN ( TO_DAYS('20190101') ),
    PARTITION p2 VALUES LESS THAN ( TO_DAYS('20190102') ),
    PARTITION p3 VALUES LESS THAN ( TO_DAYS('20190103') ),
    PARTITION p4 VALUES LESS THAN ( TO_DAYS('20190104') ),
    PARTITION p5 VALUES LESS THAN ( TO_DAYS('20190105') ),
    PARTITION p6 VALUES LESS THAN ( TO_DAYS('20190106') ),
    PARTITION p7 VALUES LESS THAN ( TO_DAYS('20190107') ),
    PARTITION p8 VALUES LESS THAN ( TO_DAYS('20190108') ),
    PARTITION p9 VALUES LESS THAN ( TO_DAYS('20190109') ),
    PARTITION p10 VALUES LESS THAN 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值