MySql 5.7.1 分区的实践

news2024/9/22 13:31:42

在性能优化中,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.coloradmin.cn/o/1994141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FishSpeech 实测,免费语音克隆神器,5分钟部署实战,让川普给你来段中文绕口令?

拍短视频,开始的时候是真人语音,之后是电脑配音,今年年初剪映上线了克隆语音,很多人都用起来了。 想要克隆别人的语音怎么办? 之前需要用 GPT-SoVITS 训练声音模型,操作复杂,对电脑配置要求较…

【算法设计】深入理解波兰表达式与逆波兰表达式

文章目录 介绍1. 波兰表达式(Prefix Notation)2. 逆波兰表达式(Postfix Notation)3. 比较与优劣4. 简单示例5. 实例演示6. 应用场景和案例7. 中缀表达式转后缀表达式8. 结论 更多相关内容可查看 应用场景:Excel自定义公…

Mozilla Firefox侧边栏和垂直标签在131 Nightly版本中开始试用

垂直选项卡和全新的侧边栏体验现已在Mozilla Firefox Nightly 131 中提供。这一更新备受社区期待和要求,我们期待看到它如何提高您的浏览效率和工作效率。如果您想体验一下这项正在进行中的工作,请这样操作: 更新到最新的Nightly版 转到设置…

LeetCode刷题笔记第49题:字母异位词分组

LeetCode刷题笔记第49题:字母异位词分组 题目: 想法: 遍历列表中的所有字符串,将字符串中字符进行排序并作为字典的键,并将原字符串做为值保存,最终输出字典的值就是最终的答案。 class Solution:def gr…

MySQL 日志表改造为分区表

文章目录 前言1. 分区表改造方法2. 操作步骤2.1 调整主键2.2 无锁变更2.3 回滚策略 3. 分区表维护3.1 创建分区3.2 删除分区3.3 分区表查询 后记 前言 业务有一张日志表,只需要保留 3 个月的数据,仅 3 月的数据就占用 80G 的存储空间,如果不…

二维数组指针,指针数组,指针函数

指针 操作 二维字符型数组 1、 首先理解二维数组指针 int a[3][4]; 第一步,确定基类型:上面的数组从本质上讲,是一维数组的数组,写成int[4] a[3]可以更好的理解,a[3]是一个一维数组,其数组…

【机器学习sklearn实战】岭回归、Lasso回归和弹性网络

一 sklean中模型详解 1.1 Ride regression 1.2 Lasso regression 1.3 ElasticNet 二 算法实战 2.1 导入包 import numpy as np import pandas as pd from sklearn import datasets from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.linear…

【开源分享】PHP在线客服系统网站源码 附搭建教程

在互联网时代,用户对于线上服务的便捷性和高效性要求越来越高。官网在线客服系统作为企业与用户之间实时沟通的工具,不仅能够提高用户满意度,还能够有效促进业务转化。然而,市面上的在线客服系统大多价格昂贵且功能单一&#xff0…

[论文翻译] LTAChecker:利用注意力时态网络基于 Dalvik 操作码序列的轻量级安卓恶意软件检测

LTAChecker: Lightweight Android Malware Detection Based on Dalvik Opcode Sequences using Attention Temporal Networks 摘要: Android 应用程序已成为黑客攻击的主要目标。安卓恶意软件检测是一项关键技术,对保障网络安全和阻止异常情况至关重要。…

1.redis7安装

安装: redis下载地址: Index of /releases/ 本次使用的版本为7.0.0. yum install gcc-c 下载上传到 /opt/redis 目录,tar -zxvf redis-7.0.0.tar.gz 解压缩 cd redis-7.0.0 执行make 执行make install. 默认会安装到 /usr/local/bi…

超融合一体机是什么意思?有什么好处

超融合一体机是什么意思?超融合一体机是一种集成了计算、存储和网络功能的一体化硬件设备。通过软件定义的方式,提供了高度集成、高可用性、高性能的数据中心解决方案。这种一体机将多个物理服务器、存储设备和网络设备整合在一个机箱内,通过…

轻空间成功完成陕西渭南砂石料场气膜仓项目

轻空间(江苏)膜结构科技有限公司凭借卓越的技术实力与丰富的项目经验,成功完成了陕西省渭南市砂石料场气膜仓的建设。这一项目的顺利交付,不仅满足了当地对高效仓储的需求,也为西北地区的仓储设施建设树立了标杆。 陕西…

twoPhaseEulerFoam 全解读之二(转)

twoPhaseEulerFoam 全解读之二(转) 本系列将对OpenFOAM-2.1.1 中的 twoPhaseEulerFoam 求解器进行完全解读,共分三部分:方程推导,代码解读,补充说明。本篇对 twoPhaseEulerFoam 中的 UEqn.H 和 pEqn.H 中的…

C# 高级数据处理:深入解析联接 Join 与 GroupJoin 操作的应用与实例演示

文章目录 一、联接概述二、Join 操作符1. Join 操作符的基本用法2. Join 操作符示例 三、GroupJoin 操作符1. GroupJoin 操作符的基本用法2. GroupJoin 操作符示例 总结 在数据处理中,联接(Join)操作是一种非常常见的需求,它允许我…

C语言典型例题30

《C程序设计教程(第四版)——谭浩强》 习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。 设d30000元,p6000元,r1%。对求得的月份取小数点后一位,对第二…

【深度学习与NLP】——RNN架构解析

目录 RNN架构解析 1.1 认识RNN模型 学习目标 什么是RNN模型 RNN模型的作用 RNN模型的分类 小节总结 1.2 传统RNN模型 学习目标 传统RNN的内部结构图 小节总结 RNN架构解析 1.1 认识RNN模型 学习目标 了解什么是RNN模型.了解RNN模型的作用.了解RNN模型的分类. 什么…

如何使用Jmeter对HTTP接口进行压力测试?

我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等&#…

openai gym box space configuration

题意:在OpenAI Gym环境中配置一个“Box”空间 问题背景: I need an observation space ranging from [0,inf) 我需要一个观察空间,其范围是从 [0, ∞)(0到正无穷大) Im new to openai gym, and not sure what the fo…

【算法】最短路径算法思路小结

一、基础:二叉树的遍历->图的遍历 提到搜索算法,就不得不说两个最基础的思想: BFS(Breadth First Search)广度优先搜索 DFS(Depth First Search)深度优先搜索 刚开始是在二叉树遍历中接触这…