前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 8 分区表 靠谱吗 (1)试试看?

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

作者头像
AustinDatabases
发布2021-12-06 15:11:45
1.1K0
发布2021-12-06 15:11:45
举报
文章被收录于专栏:AustinDatabases

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

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

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

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

代码语言:javascript
复制
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万之间

代码语言:javascript
复制
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表中,直接建立, 在使用中针对不同的语句查询模式

代码语言:javascript
复制
select * from people_range PARTITION (p3) where id = 1001000;
select * from people_range  where id = 1001000;
select * from people  where id = 1001000;

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

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

对单表的索引添加

对分区表的索引添加

代码语言:javascript
复制
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 里面有什么样的数据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档