MySql 5.7.1 分区的实践

在性能优化中,Mysql 进行分区,能有效提高查询效率,因此开始百度了起来。但是结果总不是那么一番风顺的。如今使用 uuid 作为主键的情况已是主流,因此在给表增加分区时,出现了如下错误:

错误: A PRIMARY KEY must include all columns in the table's partitioning function

PRIMARY KEY必须包含表分区函数中的所有列

这表明 MySQL 需要分区列成为主键的一部分我们需要将 uid 和 create_time 组合成一个复合主键。对没看错,复合主键,也就是两字段确定唯一(这对我们的业务来说不是很友好,看到这里其实已经可以不用考虑了,毕竟生产环境的表结构和业务是不能这样改的。本着好奇和学习的心态,我还是进行了测试)。

因此我们创建表的代码如下:根据创建时间月份创建为12 个分区。

CREATE TABLE t_test (uid VARCHAR(32) NOT NULL,capital_uid VARCHAR(32) NOT NULL,type VARCHAR(32) NOT NULL,amount DECIMAL(12,4) NOT NULL,explain2 VARCHAR(255) NOT NULL,source VARCHAR(32) NOT NULL,source_type VARCHAR(32) NOT NULL,source_uid VARCHAR(32) NOT NULL,source_extra VARCHAR(255) DEFAULT NULL,settlement_uid VARCHAR(32) NOT NULL,liquidation_state VARCHAR(32) NOT NULL,verify VARCHAR(32) NOT NULL,create_time DATETIME NOT NULL,update_time DATETIME DEFAULT NULL,remark VARCHAR(255) DEFAULT NULL,PRIMARY KEY (uid, create_time)
)
PARTITION BY HASH (MONTH(create_time))
PARTITIONS 12;

创建成功后我们可以通过下面的语句查看创建的分区(PS:这段sql代码是百度来的)

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION
FROM information_schema.`PARTITIONS` WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='这里是你的表名'

执行后就能看到分区的内容,和每个分区的数据。(具体的本人也灭有去研究过)

当然如果你的表已经存在可以通过下面的方式去修改主键,然后创建复合主键(请注意:在这里操作前记得备份

alter table test_order DROP PRIMARY KEY, ADD PRIMARY key(uid,create_time);

这个时候对应的索引,和唯一键也需要相关的调整。具体根据业务来定;重建复合主键后我们就可以对现有的表和数据进行分区操作

ALTER TABLE t_test
PARTITION BY HASH (MONTH(create_time))
PARTITIONS 12;

然后分区就完成了。最后我简单的进行了测试,40w+ 数据其实分区了以后查询效果提升也不是很明显。还是索引来的实在,而且对于这种复合主键的方式,我个人认为对业务是存在风险的,也是不推荐的。(分区以后数据底层查询的原理可以去百度了解下,这里就不做过多的阐述了)

当然如果你的表结构主键为 long、int 且自增,那么可以考虑进行分区。不会受到这个错误的影响,也不需要创建复合主键,直接使用主键进行分区,下面是一个简单的示例:

-- 创建分区表
create table t_Aa (ID int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键' PRIMARY KEY,NAME varchar(255) NOT NULL COMMENT '姓名',IDCARD varchar(255) NOT NULL COMMENT '身份证号码',PHONE varchar(255) DEFAULT NULL COMMENT '手机号码',CREATE_TIME datetime NOT NULL COMMENT '创建时间',MOD_TIME datetime DEFAULT NULL COMMENT '修改时间') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
partition by range columns (ID) (-- 按id 进行区分,10 条数据为一个分区partition `P0` values less than (100000),partition `P1` values less than (200000),partition `P2` values less than (300000),partition `P3` values less than (400000),partition `P4` values less than (500000),partition `P5` values less than MAXVALUE
)

最后关于分区,怎么分区,通过什么字段去分区还是要根据实际场景和业务去决定,不然我觉得是没有太大意义的,物极必反。

对于分区这就是我自己的一点总结,写这篇文章的内容仅是为了记录,也希望他能帮到你。如果有什么不对的地方或者更好的分区方式,欢迎指出留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400413.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI在医学领域:联邦学习 (FL) 在肿瘤学的应用综述

关键词:联邦学习 (Federated Learning, FL)、机器学习 (Machine Learning, ML)、肿瘤学 (Oncology)、数据隐私 (Data Privacy)、精准医疗 (Precision Medicine)、多模态 (Multi-modal) 肿瘤学正在经历快速的变革,这得益于机器学习(ML&#xf…

奥德彪视频素材去哪里找?视频素材网站分享

今天我们来聊一聊一个非常实用的话题——视频素材网站推荐,尤其是奥德彪视频素材。这个名词可能对你来说有些陌生,但别担心,跟着我一起探索,你会发现这是一个充满创意与乐趣的旅程。 蛙学网 首先要介绍的是蛙学网。这是一个视频素…

【传知代码】医疗AI:轻量级图像分割新突破(论文复现)

在医学图像领域,精准的图像分割技术一直是提高诊断效率和准确性的关键,然而传统的图像分割方法常常受到计算资源和处理速度的限制,尤其在资源紧张的医疗环境中更是如此。随着人工智能技术的飞速发展,我们迎来了一个激动人心的新时…

PAT--1101.B是A的多少倍

题目描述 算法分析 把数字转为字符串处理&#xff0c;会简化问题 完整代码 #include<bits/stdc.h> //万能头文件 //#include<iostream> //#include<string> //#include <iomanip> // 包含 std::fixed 和 std::setprecision using namespace std;…

PHP汽车保养维修信息管理系统小程序源码

&#x1f697;爱车守护神器&#xff01;揭秘“汽车保养维修信息管理系统”全攻略&#x1f50d; &#x1f525;【开篇揭秘&#xff1a;为何你需要它&#xff1f;】&#x1f525; 在这个快节奏的时代&#xff0c;爱车不仅是代步工具&#xff0c;更是生活品质的象征。但你是否曾…

JUC-变量的线程安全

成员变量和静态变量是否线程安全&#xff1f; 如果它们没有共享&#xff0c;则线程安全&#xff0c;即没有被外部访问。 如果它们被共享了&#xff0c;根据它们的状态是否能够改变&#xff0c;又分两种情况 如果只有读操作&#xff0c;则线程安全 如果有读写操作&#xff0c;…

精彩回顾 | 风丘科技亮相2024名古屋汽车工程博览会

2024年7月17日-19日&#xff0c;风丘科技联合德国IPETRONIK亮相日本名古屋汽车工程博览会。该展会面向汽车行业不同应用场景&#xff0c;包括新的eAxle、FCEV、ADAS、测试测量系统和ECU测试等相关技术&#xff0c;是一个专为活跃在汽车行业前线的工程师和研究人员举办的汽车技术…

Leetcode JAVA刷刷站(11)盛最多水的容器

一、题目概述 二、思路方向 这个问题是经典的“盛最多水的容器”问题&#xff0c;通常使用双指针法来解决。基本思路是&#xff0c;我们初始化两个指针&#xff0c;一个指向数组的起始位置&#xff0c;另一个指向数组的末尾位置。然后&#xff0c;我们计算当前两个指针所指向…

学习笔记第二十四天

1.exec族函数的区别 int exec l(const char *path, const char *arg, ...); int exec l p(const char *file, const char *arg, ...); int exec l e(const char *path, const char *arg,..., char * const envp[]); int exec v(const char *path, char *const argv[]); …

硬件面试经典 100 题(31~40 题)

31、多级放大电路的级间耦合方式有哪几种&#xff1f;哪种耦合方式的电路零点偏移最严重&#xff1f;哪种耦合方式可以实现阻抗变换&#xff1f; 有三种耦合方式&#xff1a;直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重&#xff0c;变压器耦合的电路可以实现…

广告资料库是什么?如何正确使用Facebook广告资料库?一文解决你的烦恼!

什么是广告资料库 广告营销领域&#xff0c;创意和策略的更新速度极快。为了跟上这种节奏&#xff0c;广告资料库应运而生&#xff0c;成为广告人和营销专家的重要工具。广告资料库是一个集中存储和管理广告素材、创意案例、市场数据和用户反馈的平台。它不仅帮助用户获得灵感…

掌握高可用核心:Keepalived 铸就坚不可摧的集群防线

目录 一.初识keepalived 二.VRRP工作模式 1.三种状态 2.选举机制 三.Keepalived 架构 四. Keepalived环境准备 五.KeepAlived 配置说明 1.配置文件组成部分 2.配置语法说明&#xff1a;全局配置 3.配置虚拟路由器 4.启用keepalived日志功能 5.实现独立子配置文件 六…

Adobe PhotoShop - 制图操作

1. 排布照片 菜单 - 视图 - 对齐&#xff1a;打开后图层将会根据鼠标的移动智能对齐 菜单 - 视图 - 标尺&#xff1a;打开后在页面出现横纵标尺&#xff0c;方便图层的对齐与排列 2. 自动生成全景照 在日常处理中&#xff0c;我们常常想要将几张图片进行拼接获得一张全景图&…

SpringBoot快速入门(手动创建)

目录 案例&#xff1a;需求 步骤 1 创建Maven项目 2 导入SpringBoot起步依赖 3 定义Controller 4 编写引导类 案例&#xff1a;需求 搭建简单的SpringBoot工程&#xff0c;创建hello的类定义h1的方法&#xff0c;返回Hello SpringBoot! 步骤 1 创建Maven项目 大家&…

【多线程-从零开始-柒】单例模式,饿汉和懒汉模式

单例模式&#xff1a;是一种设计模式 设计模式&#xff0c;类似于“棋谱”&#xff0c;就是固定套路&#xff0c;针对一些特定的场景&#xff0c;给出一些比较好的解决方法只要按照设计模式来写代码&#xff0c;就可以保证代码不会太差&#xff0c;保证代码的下限 设计模式 设…

力扣面试经典算法150题:罗马数字转整数

罗马数字转整数 今天的题目是力扣面试经典150题中的数组的简单题: 罗马数字转整数 题目链接&#xff1a;https://leetcode.cn/problems/roman-to-integer/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 将一个罗马数字转换成相应的整数。输入是一…

Docker 日志管理

一、ELK -Filebeat Elasticsearch 数据的存储和检索 常用端口&#xff1a; 9100&#xff1a;elasticsearch-head提供web访问 9200&#xff1a;elasticsearch与其他程序连接或发送消息 9300&#xff1a;elasticsearch集群状态 Logstash 有三个组件构成input&#xff0c;fi…

QT输入组、QT显示组

目录 QT输入组 ​编辑 Combo Box&#xff08;下拉菜单部件&#xff09; Font Combo Box&#xff08;显示系统中可用的字体&#xff09; Line Edit&#xff08;行编辑器&#xff09; Text Edit&#xff08;文本编辑器&#xff09; Plain Text Edit&#xff08;纯文本编辑…

MySQL基础练习题39-商品销售明细表1

目录 题目 准备数据 分析数据 总结 题目 求2024-01-01 每个门店 每个商品 的 销售单量, 销售数量, 销售金额, 线上单量, 线下单量 准备数据 -- 创建库 create database db_2; use db_2;-- 创建商品销售明细(核销)天表 CREATE TABLE dwm_sold_goods_sold_dtl_i (trade_da…

Apple 智能基础语言模型

Introducing Apple’s On-Device and Server Foundation Models technical details June 10, 2024 在2024年的全球开发者大会上&#xff0c;苹果推出了Apple Intelligence&#xff0c;这是一个深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统。Apple Intelligen…