MYSQL 8 分区表 靠谱吗 (1)试试看?

编程入门 行业动态 更新时间:2024-10-25 18:24:53

MYSQL  8  <a href=https://www.elefans.com/category/jswz/34/1765571.html style=分区表 靠谱吗 (1)试试看?"/>

MYSQL 8 分区表 靠谱吗 (1)试试看?

众所周知SQL SERVER , ORACLE , PG 这几个数据库都可以使用分区表的功能,通过分区表来将数据进行分割,提高表的数据承载的能力。MYSQL 8.0 之前是在是没有听说有什么人用分区表的功能,分区表的功能对于mysql来说是一个摆设。

8.0 后的MYSQL 在分区表上做了一些事情,下面就的看看mysql 8.0后在分区表上的功能是否齐全了,性能如何。

首先需要做的是加载测试数据,这里使用了mysqlslap 工具

创建一个test 数据库,并创建表people, 并生成1000万的数据

CREATE TABLE `people` (

  `id` int NOT NULL AUTO_INCREMENT,

  `name` varchar(255) DEFAULT NULL,

  `age` int DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6112408 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

mysqlslap  --concurrency=100 --number-of-queries=10000000 --create-schema=test --query="INSERT INTO people(name,age) VALUES (uuid(), RAND() * 100)"  -uadmin -p1234.Com -P3306 -h 192.168.198.201

下面简单的说一下,进行测试业务的模式以及如何进行mysql 分区表的使用

首先业务是根据集团的编号,根据编号将数据进行分区,并且提供相关信息的查询和数据操作

下面我们模拟range 分区表,尽量创造更多的分区表每个分区表的数据在10万到100万之间

CREATE TABLE people_range (

    id INT NOT NULL,

    name varchar(255),

    age int

)

PARTITION BY RANGE (id) (

    PARTITION p0 VALUES LESS THAN (100000),

    PARTITION p1 VALUES LESS THAN (500000),

    PARTITION p2 VALUES LESS THAN (1000000),

    PARTITION p3 VALUES LESS THAN (2000000),

    PARTITION p4 VALUES LESS THAN (3000000),

    PARTITION p5 VALUES LESS THAN (4000000),

    PARTITION p6 VALUES LESS THAN (5000000),

    PARTITION p7 VALUES LESS THAN (5100000),

    PARTITION p8 VALUES LESS THAN (5300000),

    PARTITION p9 VALUES LESS THAN (5600000),

    PARTITION p10 VALUES LESS THAN (6000000),

    PARTITION p11 VALUES LESS THAN (6300000),

    PARTITION p12 VALUES LESS THAN (6800000),

    PARTITION p13 VALUES LESS THAN (7000000),

    PARTITION p14 VALUES LESS THAN (8000000),

    PARTITION p15 VALUES LESS THAN (9100000),

    PARTITION p16 VALUES LESS THAN (9500000),

    PARTITION p17 VALUES LESS THAN MAXVALUE

);

相关我们将数据插入到mysql 8.026中的test 库的people表中,直接建立, 在使用中针对不同的语句查询模式

select * from people_range PARTITION (p3) where id = 1001000;

select * from people_range  where id = 1001000;

select * from people  where id = 1001000;

在mysql 的数据库文件夹下存在问题,分区表的数据每个分区为一个文件

我们分别对分区表进行索引的添加

对单表的索引添加

对分区表的索引添加

create index idx_name_people_range on people_range (name);

查询数据

至此基于range 的方式中之前一些担心的问题,如MYSQL分布表的性能问题,以及分区索引,和非分区数据定位性能的问题,从上图有了一个比较好的证明。

除此以外,还需要针对一些稍微复杂的查询进行测试

这里又生成了一个类似的单表 people_1 产看如果 people_range 作为驱动表,或非驱动表,以及对比两个单表JOIN查询中与分区表之间的性能差异。

下图代表的  2  3  4 分别为

可以看到的duration 中两个单表JOIN  VS  以单表为驱动表与分区表JOIN  VS 以分区表为驱动表 与单表JOIN 的分析。

那么到底profiles 里面有什么样的数据,咱们下回书

更多推荐

MYSQL 8 分区表 靠谱吗 (1)试试看?

本文发布于:2024-03-13 23:09:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1735096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分区表   试试看   MYSQL   靠谱吗

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!