MySQL分区表(14/16)

分区表

基本概述

分区表是数据库中一种用于优化大型表数据管理和查询性能的技术。它将一个表的数据根据特定的规则或条件分割成多个部分,每个部分称为一个分区。每个分区可以独立于其他分区进行存储、管理和查询,这样可以提高数据处理的效率,尤其是在处理大量数据时。

以下是分区表的一些关键特点和优势:

  1. 数据分散存储:分区表将数据分散存储在不同的物理区域,这有助于减少单个数据文件的大小,提高I/O性能。
  2. 查询优化:通过只查询相关的分区而不是整个表,可以减少数据扫描的范围,从而加快查询速度。分区表对于业务来说是透明的,不需要修改业务代码即可实现数据的分区管理。
  3. 维护便捷:分区表允许对单个分区进行备份、恢复、优化和删除等操作,而不需要影响整个表,这简化了数据库的维护工作。
分区表可以方便地清理历史数据,例如通过`ALTER TABLE ... DROP PARTITION`快速删除过期数据。
  1. 提高可用性:在某些情况下,如果一个分区出现问题,其他分区仍然可以继续工作,这提高了整个表的可用性。

  2. 灵活的分区策略:可以根据业务需求和数据特性选择不同的分区方法,如范围分区、列表分区、哈希分区等。

在实际应用中,分区表通常用于处理以下场景:

  • 数据量巨大,单个表的大小超过了数据库管理系统的推荐限制。
  • 数据访问模式具有明显的分区特征,如时间序列数据、地理位置数据等。
  • 需要定期清理或归档旧数据,同时保持新数据的高效访问。

分区表的设计和实施需要仔细规划,以确保分区策略与应用程序的需求和数据访问模式相匹配。但分区也可能引入一些复杂性,特别是在跨分区查询和数据一致性方面。

MyISAM引擎

对于MyISAM存储引擎,每个分区的数据和索引都存储在单独的文件中。这种设计允许对每个分区进行独立的管理,例如备份、恢复、优化和删除。

当为MyISAM表创建分区时,每个分区都会生成三个文件:.frm(表结构定义文件)、.MYD(MyISAM数据文件)和.MYI(MyISAM索引文件)。这些文件的命名通常遵循以下模式:

table_name-partition_number.frm
table_name-partition_number.MYD
table_name-partition_number.MYI

其中table_name是表的名称,partition_number是分区的编号或名称。

例如,如果有一个名为sales的MyISAM分区表,它包含两个分区,那么文件系统上可能会出现以下文件:

sales-0.frm
sales-0.MYD
sales-0.MYI
sales-1.frm
sales-1.MYD
sales-1.MYI

每个分区的.MYD.MYI文件包含该分区的数据和索引,而.frm文件包含整个表的结构定义,不论分区数量如何,通常只有一个.frm文件。

这种每个分区对应一组文件的方式,使得MyISAM分区表在管理大量数据时更加灵活和高效。然而,这也意味着与InnoDB等其他存储引擎相比,MyISAM分区表在文件系统层面的管理可能更为复杂。

InnoDB引擎

InnoDB存储引擎提供了几种不同的分区存储策略,以满足不同场景下的性能和维护需求。以下是InnoDB支持的主要分区存储策略及其操作步骤:

  1. 通用分区(Generic Partitioning)

    • 描述:在这种策略下,每个分区的数据和索引都存储在同一个.ibd文件中。这是MySQL默认分区方式。
    • 操作步骤
      • 创建分区表时,不需要指定单独的文件存储每个分区,InnoDB会自动管理所有分区的数据和索引。
      • 使用CREATE TABLE ... PARTITION BY语句定义分区表结构。
  2. 文件分区(File-per-Table Partitioning)

    • 描述:每个InnoDB表(包括分区表中的每个分区)都有自己的.ibd文件。这种策略在MySQL 5.7及以后的版本中引入,称为innodb_file_per_table
    • 操作步骤
      • 确保my.cnfmy.ini配置文件中启用了innodb_file_per_table选项。
      • 创建表或分区表时,每个表或分区都会自动创建一个新的.ibd文件。
      • 使用CREATE TABLE ... PARTITION BY语句定义分区表结构。
  3. 本地分区(Local Partitioning)

    • 描述:从MySQL 5.7.9版本开始,InnoDB引入了本地分区策略,允许将每个分区的数据和索引存储在单独的.ibd文件中,但这些文件都位于同一个数据库目录下。
    • 注意:本地分区策略要求所有分区的.ibd文件都存储在数据库的默认目录下,而文件分区特性则允许每个表(包括分区表中的每个分区)的.ibd文件存储在任意指定的目录下。本地分区主要是为了更好地管理分区表,而文件分区特性则提供了更广泛的表级文件管理能力。
    • 操作步骤
      • my.cnfmy.ini配置文件中设置innodb_local_partition选项为ON
      • 创建分区表时,使用DATA DIRECTORYINDEX DIRECTORY选项为每个分区指定存储路径。
  • 使用CREATE TABLE ... PARTITION BY语句定义分区表结构,并为每个分区指定DATA DIRECTORYINDEX DIRECTORY
  1. 合并分区(Merged Partitioning)

    • 描述:这是一种特殊的分区策略,它允许将多个分区合并为一个单一的分区。这在某些情况下可以提高查询性能,因为合并分区可以减少分区开销。
    • 操作步骤
      • 使用ALTER TABLE ... COALESCE PARTITION语句将两个或多个相邻分区合并为一个分区。
      • 确保合并的分区在逻辑上是连续的,并且它们具有相同的分区表达式。
  2. 系统分区(System Partitioning)

    • 描述:系统分区是一种自动管理的分区策略,它允许InnoDB自动创建和管理分区。这种策略主要用于内部系统表的分区。
    • 操作步骤
      • 对于系统表,MySQL会自动使用系统分区策略。
      • 普通用户不需要(也不能)直接操作系统分区。

在选择分区策略时,应根据数据的访问模式、存储需求、维护便利性以及性能目标来决定。例如,如果你需要对每个分区进行独立的备份或恢复,那么文件分区可能是一个好选择。如果你希望提高查询性能并减少管理开销,那么合并分区可能更适合。对于大多数用户来说,通用分区和文件分区是最常用的两种策略。

分区使用建议

InnoDB存储的文件分区、本地分区表一般包含一个.frm文件和多个.ibd文件,每个分区对应一个.ibd文件。

  • .frm文件:这是MySQL中的表定义文件(Form File),它包含了表的结构定义信息,例如表的列定义、索引、存储引擎等元数据。.frm文件是文本文件,可以直接用文本编辑器查看和编辑(虽然不推荐这样做,因为可能会破坏表的结构)。在分区表中,.frm文件通常只包含表的定义信息,而不包含实际的数据。

  • .ibd文件:这是InnoDB存储引擎的数据文件(InnoDB Data File),它包含了实际的数据和索引信息。对于分区表,每个分区的数据和索引可以存储在不同的.ibd文件中。这样做的好处是,可以单独对每个分区进行操作,比如备份、恢复、导入和导出,而不需要影响整个表。

对于InnoDB引擎层来说,这是多个表;而对于Server层来说,这仍然是一个表。这意味着,对于需要修改整个表的DDL操作,如ALTER TABLE,可能会受到MDL锁的影响,导致性能问题。

在分区时需要注意:因为MySQL访问分区表时的行为,当分区数量很多时,可能会因为打开文件的个数超过上限而报错。

作者与版本更新计划

感谢您的阅读与支持!本文是《MySQL实战与优化》专栏中的一篇精选文章,该专栏共包含16篇文章,旨在为您提供实战中可直接应用的宝贵知识。

关注公众号【数舟】,获取作者最新动态,公众号后台回复【mysql2024】,即可免费领取这份包含16篇文章的完整的PDF专栏!

目前版本为v1.0,更新时间2024年4月10日。后续此文档更新与版本发布会同步到知识星球【数舟】中。

知识整理与创作不易,感谢大家理解与支持!

加入知识星球,您将获得更多独家内容、专栏更新以及与行业内专家和同行的互动交流机会。我们在知识星球等您,一起探索MySQL的深层次世界!

星球内目前包含300+精品文章,内容涵盖大数据、MySQL、运维、Python、调优、经验分享、数据分析等方向内容,会根据大家的学习需求更新更多方向的内容。

🔗 立即扫描下方二维码,加入知识星球,与行业精英共同成长,开启您的专属学习之旅!

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

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

相关文章

VS Code中“@“符号如何自动补全导入路径

一、下载 Path Intellisense 插件 二、打开设置,在扩展中选择该插件,点击setting.json 三、添加配置: "":"${workspaceRoot}/src" 如图: 四、在项目src目录中新建jsconfig.json文件 (一定要是src目…

动态规划(背包问题)

一:动态规划概述: 动态规划实际上是一种将原本的 大 方面的问题转化为许许多多的 小方面 的一种应用, 在一定程度上避免数据的重复, 并且能够将数据以自己希望的方式进行存储, 用来解决多阶段的数学问题, 从而提高算法的效率 在算法当中, 动态规划主要包括有: 递推, 线性DP 记忆…

【Java核心技术】第3章 Java的基本程序设计结构

1 数据类型 Java一共有8种数据类型: 4种整型 类型存储需求int4字节short2字节long8字节byte1字节 2种浮点型 类型存储需求float4字节double8字节 1种字符型 1种布尔型 2 变量声明 2.1 局部类型推断 如果可以从变量的初始值推断变量类型,只需要使用…

【数组】5螺旋矩阵

这里写自定义目录标题 一、题目二、解题精髓-循环不变量三、代码 一、题目 给定⼀个正整数 n,⽣成⼀个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正⽅形矩阵。 示例: 输⼊: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 二、解题精髓…

JVM参数列表

-client :设置JVM使用client模式,特点启动较快(神机不明显(I5/8G/SSD)) -server :设置JVM使用server模式。64位JDK默认启动该模式 -agentlib:libname[options] :用于加载本地的lib -agentlib:hprof :用于获取JVM的运行情况 -agentpath:pathnamep[options] :加载制定路径的本…

Day:007(1) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy的介绍 Scrapy 是一个用于抓取网站和提取结构化数据的应用程序框架,可用于各种有用的应用程序,如数据挖掘、信息处理或历史存档。 尽管 Scrapy 最初是为网络抓取而设计的,但它也可用于使用API提取数据或用作通用网络爬虫。 Scrapy的优势…

【Nacos】Nacos最新版的安装、配置过程记录和踩坑分享

Nacos是什么?有什么功能?大家可以自行联网(推荐 https://cn.bing.com/)搜索,这里就不做介绍了。 简单的看了下官网,安装最新版的Nacos(v2.3.2)需要使用到JDK(1.8.0&…

应急响应-战前反制主机HIDSElkeid蜜罐系统HFish

知识点 战前-反制-平台部署其他更多项目: https://github.com/birdhan/SecurityProduct HIDS:主机入侵检测系统,通常会有一个服务器承担服务端角色,其他主机就是客户端角色,客户端加入到服务端的检测范围里&#xff…

滑动窗口用法

文章目录 1. 长度最小的子数组(模板)2. 无重复字符的最长字串3. 最小覆盖字串4. 加油站5. 替换字串得到平衡字符串 1. 长度最小的子数组(模板) 题目分析 直接用步骤分析示例1,[]表示窗口,min_length表示满…

软件测试级别和对应要求

软件测试级别指的是将软件测试活动按照不同的开发阶段和测试目的进行分类,形成不同层次的测试过程。 分级依据,根据V模型 单元测试:这是软件生命周期中的第一个测试级别,主要针对软件的最小单元模块进行,例如类、函数…

Robotstudio2024中从备份文件恢复和创建工作站的具体方法演示

Robotstudio2024中从备份文件恢复和创建工作站的具体方法演示 如下图所示,打开Robotstudio2024软件,有需要的可以从以下链接获取: ABB机器人编程仿真软件RobotStudio 2024.1-链接baiduyun 点击“新建”—工作站—创建, 如下图所示,点击“ABB模型库”,选择自己使用的机器…

Proxmox VE qm 方式一键创建Linux虚拟机

前言 实现qm 方式一键创建Linux虚拟机,提高效率。 qm 一键创建Linux 虚拟机 以下实现在线下载镜像,创建虚拟机,安装系统需要自己手动安装哦,如果想实现全自动安装系统,建议部署自己的内网pxe server 系统参考各参数…

EditPlus来啦(免费使用!)

hello,我是小索奇 今天推荐一款编辑器,是索奇学习JavaSE时入手滴,非常好用哈,小索奇还是通过老杜-杜老师入手滴,相信很多人也是通过老杜认识嘞,来寻找破解版或者准备入手这个间接使用的编辑器~ EditPlus是…

HarmonyOS开发实例:【菜单app】

简介 分布式菜单demo 模拟的是多人聚餐点菜的场景,不需要扫码关注公众号等一系列操作,通过分布式数据库可以方便每个人可及时查看到订单详情,数量,总额等;效果如下 demo效果 工程目录 完整的项目结构目录如下 ├…

如何编译OpenHarmony自带APP

作者:王石 概述 OpenHarmony 的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉 OpenHarmony 能力的同学主干代码是非常重要的资源,在主干代码的 applications 目录里聚集了很多原生的应用实现,那么如何编译这些代码…

广州南沙番禺联想SR530服务器主板传感器故障维修

今日分享一例广州市南沙区联想ThinkSystem SR530服务器sensor sysbrd vol故障问题维修案例; 服务器型号是:Lenovo thinksystem sr530 g6服务器 服务器所在位置:广东省广州市南沙区 服务器故障问题:机房异常停电,来电后…

【Entity Framework】EF连接字符串和模型

【Entity Framework】EF连接字符串和模型 文章目录 【Entity Framework】EF连接字符串和模型一、概述二、使用 Code First 按约定创建连接三、使用 Code First 和指定的数据库名称按约定创建连接四、将 Code First 与 app.config/web.config 文件中的连接字符串结合使用五、将 …

请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证

问题 请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证 详细问题 笔者在专利业务办理系统进行新用户注册,注册时间为晚上大概22:00以后。注册时已核对姓名、证件号码、有效期和年限,已确保正确&…

LinkedHashMap部分底层源码解析

JDK版本为1.8.0_271,LinkedHashMap继承了HashMap,LinkedHashMap在HashMap的基础上维护了一个双向链表,实现了可以根据插入顺序/访问顺序(accessOrderfalse/true)访问Map集合。 关于HashMap的原理可以参考HashMap部分底…

RabbitMQ-死信队列常见用法

目录 一、什么是死信 二、什么是死信队列 ​编辑 三、第一种情景:消息被拒绝时 四、第二种场景:. 消费者发生异常,超过重试次数 。 其实spring框架调用的就是 basicNack 五、第三种场景: 消息的Expiration 过期时长或队列TTL…