MySQL分区

 1:概念

在MySQL中,PARTITIONS 关键字用于定义表的分区。分区是一种数据库设计技术,用于将表中的数据分散存储在多个物理部分,但逻辑上仍然表现为一个单一表。这样做可以提高查询的性能,特别是在处理大量数据时。详细来说: - PARTITIONS 128 指的是为这个表创建128个分区。这意味着数据会被分散到128个不同的部分,这可以帮助提高查询和维护的性能,尤其是对于非常大的数据集。 - PARTITION p0 ENGINE = InnoDB MAX_ROWS = 0 MIN_ROWS = 0 这行定义了一个特定的分区 p0。其中: - ENGINE = InnoDB 指定了此分区使用InnoDB存储引擎。InnoDB 是MySQL默认的存储引擎,支持事务处理,行级锁定和外键。 - MAX_ROWS = 0 和 MIN_ROWS = 0 分别定义了这个分区的最大行数和最小行数。当设置为0时,表示没有指定限制。 综上所述,这些设置用于配置MySQL表的物理存储细节,使得表可以根据指定的参数进行分区管理,旨在优化性能和数据管理效率。使用分区通常适用于数据量极大的情况,可以通过分区来提高查询速度,以及更高效的维护数据。

2:例子

分区能提高查询性能的一个关键理由在于它能够减少需要扫描的数据量,尤其是对于涉及大数据集的查询。分区表是逻辑上的一个整体,但物理上被分割成多个独立的部分,允许数据库优化查询,通过只访问包含所需数据的分区来减少访问的数据量。下面通过一个具体的例子来说明如何通过分区提高查询性能:

示例背景

假设你有一个数据库存储电商平台的订单信息,这个表名为 orders,包含数千万条记录。表结构包括 order_idcustomer_idorder_dateamount 等字段。

不使用分区

如果没有应用分区,当执行查询特定时间段内的订单时(比如查询2022年的所有订单),数据库可能需要扫描整个表来查找符合条件的记录。随着数据量的增长,这样的查询将变得越来越慢。

应用分区

假设你按照年份对 orders 表进行分区,每一个年份的数据存储在一个单独的分区中:

CREATE TABLE orders (order_id INT AUTO_INCREMENT,customer_id INT,order_date DATE,amount DECIMAL(10, 2),PRIMARY KEY (order_id, order_date)
) PARTITION BY RANGE (YEAR(order_date)) (PARTITION p2020 VALUES LESS THAN (2021),PARTITION p2021 VALUES LESS THAN (2022),PARTITION p2022 VALUES LESS THAN (2023),PARTITION p2023 VALUES LESS THAN (2024)
);

查询性能的提升

现在,当查询2022年的订单时,SQL只会在 p2022 这一个分区中查找数据:

SELECT * FROM orders WHERE order_date BETWEEN '2022-01-01' AND '2022-12-31';

MySQL数据库知道2022年的数据只存在于 p2022 分区,在处理查询时,它会直接跳过其他分区,只扫描这一个分区。这样做显著减少了需要检查的数据量,从而加快了查询速度。

总结

分区实际上是提供了一种物理上的数据组织方式,使得查询操作能够更加聚焦于相关的数据段,避免了全表扫描,从而提升了查询效率,特别是在数据量非常大的情况下。这种方式特别适合于那些可以根据某些明显的业务逻辑(如时间、地区等)被分割的大表。


3:PARTITION BY类型

在 MySQL 中,PARTITION BY 可以使用几种不同的分区策略,每种策略适用于不同的使用场景。以下是主要的分区类型:

  1. 1:RANGE 分区

    • 将数据根据指定的列的值分配到不同的分区中,每个分区包含一个值范围。
    • 例子:按年份分区,每年的数据存储在不同的分区。
     CREATE TABLE employees (id INT,name VARCHAR(30),hired DATE)PARTITION BY RANGE (YEAR(hired)) (PARTITION p0 VALUES LESS THAN (1991),PARTITION p1 VALUES LESS THAN (1996),PARTITION p2 VALUES LESS THAN (2001));
  1. 2:LIST 分区

    • 类似于 RANGE 分区,但是分区依据是列值匹配一个列表,而不是值范围。
    • 例子:按部门编号分区,特定编号的部门在特定分区。
     CREATE TABLE employees (id INT,name VARCHAR(30),dept_id INT)PARTITION BY LIST (dept_id) (PARTITION p0 VALUES IN (1, 2, 3),PARTITION p1 VALUES IN (4, 5, 6),PARTITION p2 VALUES IN (7, 8, 9));
  1. 3:HASH 分区

    • 使用用户定义的表达式对某个列的值进行哈希处理,根据哈希结果将数据分配到不同的分区。
    • 例子:按员工 ID 的哈希值分区。
     CREATE TABLE employees (id INT,name VARCHAR(30))PARTITION BY HASH (id) PARTITIONS 4;
  1. 4:KEY 分区

    • 与 HASH 分区类似,但是哈希键是一个或多个列,由 MySQL 自动管理哈希函数。
    • 例子:使用员工名字作为分区键。
     CREATE TABLE employees (id INT,name VARCHAR(30))PARTITION BY KEY (name) PARTITIONS 4;
  1. 5:LINEAR HASH 分区LINEAR KEY 分区

    • 这些是 HASH 和 KEY 分区的变体,区别在于使用线性哈希算法,这种算法在分布数据时更均匀。
    • 例子:线性哈希分区。
     CREATE TABLE employees (id INT,name VARCHAR(30))PARTITION BY LINEAR HASH (id)PARTITIONS 4;
  1. 6:SUBPARTITION(子分区)

    • 子分区是在已经定义的任何分区类型上再次进行分区的方法,提供多级分区策略。
    • 例子:按年份分区,每个年份分区内按部门进行子分区。
     CREATE TABLE employees (id INT,dept_id INT,hired DATE)PARTITION BY RANGE (YEAR(hired)) SUBPARTITION BY HASH (dept_id) (PARTITION p0 VALUES LESS THAN (1991) ( SUBPARTITION s0, SUBPARTITION s1),PARTITION p1 VALUES LESS THAN (1996) ( SUBPARTITION s2, SUBPARTITION s3));

这些分区类型为数据库管理员提供了灵活的数据管理选择,可以根据不同的查询模式和数据访问模式进行优化。

 

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

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

相关文章

【Linux】网络编程3

文件描述符的作用 在TCP通信的过程,服务器端会产生两类不同的文件描述符,一个是监听的文件描述符;另一个是用于通信的文件描述符。它们有什么不同呢? 监听的文件描述符: 只有一个,它不负责与客户端的通信&…

番外-JDBC:2024年最新java连接数据库教程

前言 JavaScript的内容晚点更新,今天继续更新一点番外,今天更新的是jdbc,如何用java连接数据库 1.导包 要使java能够连接数据库我们需要导入一个包,请按照以下操作安装并导包 1.进入官网 MySQL 以上为官网链接进去后点击下载…

LIMA模型——大模型对齐的新方法

人工智能咨询培训老师叶梓 转载标明出处 大模型通常在两个阶段进行训练:首先是从原始文本中进行无监督预训练,以学习通用表示;其次是通过大规模的指令微调和强化学习,以更好地适应最终任务和用户偏好。来自Meta AI、卡内基梅隆大…

向量数据库PGVECTOR安装

文章目录 前提向量数据库介绍PGVECTOR安装1、pgvector下载2、编译安装3、创建vector扩展 前提 已经安装好了pg14版本。 其他版本也可以。 pg安装教程:https://blog.csdn.net/yushaoyyds/article/details/138855306?spm1001.2014.3001.5502 向量数据库介绍 向量数…

Spring Boot框架助力电商系统设计

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架,并且可以不需要配置任何的XML文件就可以,因为Spring Boot里面自带了很多接口,只需要配置不同的接口就会自动的应用并且识别需要的依赖,在配置方面非…

双十一之夜:珠海体育中心悲剧,极端行为下的反思

双十一,这个原本充满购物狂欢与期待的节日,在珠海市香洲区的珠海市体育中心,被一场突如其来的极端事件所笼罩,让欢乐的氛围即刻凝固。62岁男子的一时冲动,驾车冲撞行人,导致35条宝贵生命戛然而止&#xff0…

常用环境部署(二十三)——Docker部署ERPNext

1、介绍 ERPNext 是一种业务财务集成一体的现代管理关键。 与传统会计和 ERP 相比,它具有许多优势。相对于传统记账软件的优势: ​不仅仅是会计! 管理库存、账单、报价、销售线索、工资单等。所有数据存放在同一个地方安全存储, 所有用户都在…

黑马程序员——Vue3小兔鲜项目(5. Home页)

静态结构搭建和分类实现 1. 整体结构创建 1- 按照结构新增五个组件&#xff0c;准备最简单的模版&#xff0c;分别在Home模块的入口组件中引入 HomeCategoryHomeBannerHomeNewHomeHotHomeProduct <script setup> </script><template><div> HomeCate…

nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。

在项目中会碰见需要在nginx代理多个项目&#xff0c;如果在加上uniapp开发的H5端的项目&#xff0c;你还要在nginx中区分PC端和手机H5端&#xff0c;这就会让人很头大&#xff01;网上大部分的资料都是采用在nginx的conf配置文件中添加区分pc和手机端的变量例如&#xff1a;set…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

除了 Postman,还有什么好用的 API 调试工具吗

尽管 Postman 拥有团队协作等实用特性&#xff0c;其免费版提供的功能相对有限&#xff0c;而付费版的定价可能对小团队或个人开发者而言显得偏高。此外&#xff0c;Postman 的访问速度有时较慢&#xff0c;这可能严重影响使用体验。 鉴于这些限制&#xff0c;Apifox 成为了一…

缓存(四)指标

这张图总结了缓存性能的三个主要指标&#xff1a;未命中率&#xff08;Miss Rate&#xff09;、命中时间&#xff08;Hit Time&#xff09; 和 未命中惩罚&#xff08;Miss Penalty&#xff09;。这些指标用于评估缓存系统的效率和性能。 1. 未命中率&#xff08;Miss Rate&am…

AI赋能电商:提升用户体验与销售效率的创新应用与未来展望

目录 前言1. AI在电商中的核心应用领域1.1 智能购物推荐1.2 精准的会员分类1.3 智能定价系统1.4 提升用户体验的智能客服系统 2. AI应用中的挑战与应对策略2.1 数据安全与隐私保护2.2 算法的公平性与透明度 3. AI在电商行业的未来发展趋势3.1 虚拟购物助手与元宇宙体验3.2 基于…

苹果音乐因为忘记续期,禁用了自己服务器...

我在《从零开始搭建博客》中有提到如何续费 SSL 证书&#xff0c;以及如何自动续费。当时我只是顺带提一嘴&#xff0c;没想到这么快&#xff0c;就有大厂因为忘记续费证书了… 然后&#xff0c;苹果是第一个被打脸的&#xff0c;忘记续期了&#xff0c;而且影响是非常重要的 …

CACTER诚邀您参加2024高交会

11月14-16日 第二十六届中国国际高新技术成果交易会 于深圳国际会展中心&#xff08;宝安&#xff09; 隆重开幕 CACTER于12号馆D12展位诚邀各位莅临 关于高交会 中国国际高新技术成果交易会&#xff08;简称“高交会”&#xff09;由深圳市人民政府主办&#xff0c;是目前…

微信多账号管理,让你的管理更轻松,效率更高!

现在微信账号越来越多&#xff0c;工作生活里头的微信一多&#xff0c;管理起来就头疼。各种消息、好友请求、群发消息一大堆&#xff0c;手忙脚乱的。 这时候&#xff0c;有个给力的微信管理工具就太重要了&#xff0c;它能帮你搞定社交&#xff0c;管理起来也轻松。 先说说…

Unity图形学之Shader2.0 OutLine实例

1.轮廓&#xff1a; &#xff08;1&#xff09;直接 渲染两个物体&#xff1a;一个大 一个小&#xff0c;大的是轮廓&#xff0c;直接返回一个颜色&#xff1b;小的物体按照纹理采样返回颜色 两个Pass { } 第一个Pass 渲染大的物体边缘第二个Pass 渲染小的物品 Shader "…

基于Springboot+微信小程序的农产品销售小程序 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…

OLED 显示画面的变换操作——上下、左右翻转

OLED 画面旋转 OLED 写入函数定义 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常OLED 显示界面转换函数如下 void OLED_DisplayTurn(u8 i) {if(i0…