返回顶部
首页 > 资讯 > 数据库 >【SQL应知应会】表分区(五)• MySQL版
  • 256
分享到

【SQL应知应会】表分区(五)• MySQL版

sqlmysql数据库oracle大数据面试数据分析 2023-08-16 14:08:21 256人浏览 薄情痞子
摘要

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有Mysql也有oracle 分区表 • mysq

请添加图片描述

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流

本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有Mysql也有oracle

请添加图片描述

前言

在前面的内容中,✅【SQL应知应会】表分区(一)• MySQL版、✅【SQL应知应会】表分区(二)• MySQL版、✅【SQL应知应会】表分区(三)• MySQL版以及✅【SQL应知应会】表分区(四)• MySQL版中,已经完成了Mysql的表分区方面的大部分知识的学习
🆗今天这篇内容,将继续进行讲述MySQL的表分区的后续内容,主要包括 MySQL分区处理null值的方式、获取分区表信息的方法、分区表与非分区表的性能对比和分区的使用场景
希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持
💻那么,快拿出你的电脑,跟着文章一起学习起来吧

一、分区表

1.非分区表

👉:传送门💖非分区表构💖

2.分区表

2.1 概念

👉:传送门💖概念💖

2.2 MySQL数据库表分区

2.2.1 InnoDB 逻辑存储结构

👉:传送门💖InnoDB 逻辑存储结构💖

2.2 段(segment)
2.2.3 区(extent)
2.2.4 页(page)

2.3 MySQL数据库分区的由来

👉:传送门💖MySQL数据库分区的由来💖

2.4 为什么对表进行分区?

👉:传送门💖为什么对表进行分区💖

1 表分区要解决的问题
2.4.2 表分区有如下优点

2.5 MySQL的分区形式

👉:传送门💖MySQL的分区形式💖

1 水平分区(HorizontalPartitioning)
2.5.2 垂直分区(VerticalPartitioning)

2.6 MySQL分区的类型

1 range分区 👉:传送门💖range分区💖
2.6.2 list分区(列表分区)
2.6.3 hash分区
2.6.4 KEY表分区
2.6.5 多字段分区(range、list)
2.6.6 分区注意事项及适用场景

2.7 MySQL分区代码

1range分区
2.7.2list分区
👉:传送门💖2.7.1~ 2.7.2💖
2.7.3 hash表分区
2.7.4 key表分区
2.7.5复合分区
2.7.5.1 range-hash(范围哈希)复合分区
2.7.5.2 list-hash(列表哈希)复合分区
👉:传送门💖2.7.3 ~ 2.7.5💖
2.7.5.3 range-key 复合分区
2.7.5.4 list - key 复合分区
👉:传送门💖2.7.5.3 ~ 2.7.5.4💖

2.8 常见分区操作

👉:传送门💖常见分区操作💖

1 删除分区
2.8.2 增加分区
2.8.3 分解分区
2.8.4 合并分区
2.8.5 重新定义分区
2.8.6 重建分区
2.8.7 检查分区
2.8.8 修补分区

2.9 MySQL分区表的局限性

👉:传送门💖MySQL分区表的局限性💖

1 错误示例
2.9.2 错误修正

2.10 MySQL分区处理null值的方式

  • 如果分区键所在列没有not null约束
    • 如果是range分区表,那么null行将被保存在范围最小的分区。
    • 如果是list分区表,那么null行将被保存到1ist为0的分区。
    • 在按HASH和KEY分区的情况下,任何产生NULL值的表达式mysql都视同它的返回值为0.

为了避免上述这种情况的产生,建议分区键设置成NOT MULL。

  • 分区键必须是INT类型,或者通过表达式返回INT类型,可以为NULL
    • 唯一的例外是当分区类型为KEY分区的时候,可以使用其他类型的列作为分区键(BLOB or TEXT列除外)
  • 对分区表的分区键创建索引,那么这个索引也将被分区,分区键没有全局索引一说
  • 只有RANGE和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
  • 临时表不能被分区

2.11 获取分区表信息的方法

2.11.1 查看创建分区表的create语句

## show create table 表名show create table foo_list

2.11.2 查看表是否是分区表

show table status like 'foo_range'

2.11.3 查看infORMation_schema.partition表

  • 该表提供分区表相关的信息,每一行都关联一个独立的分区或者子分区
TABLE_SCHEMA : 分区表所在的数据库名称TABLE_NAME : 分区表的名称PARTITION_NAME : 分区的名称SUBPARTITION_NAME : 子分区的名称PARTITION_ORDINAL_POSITION : 分区在表中的位置,从1开始,会在分区添加,删除,重整使会发生编号SUBPARTITION_ORDINAL_POSITION : 子分区在分区中的位置PARTITION_METHOD : 分区类型,可以是RANGE,LIST,HASH,LINEAR HASH,KEY,or LINEAR KEYSUBPARTITION_METHOD : 子分区的类型,可以是HASH,LINEAR HASH,KEY,or LINEAR KEYPARTITION_EXPRESSION : 分区表达式信息,如PARTITION BY HASH(c1+c2)语句PARTITION_DESCRIPTION : RANGE and LIST分区时有用,显示相关的定义信息,其他的类型值为NULLCREATE_TIME : 建立的时间UPDATE_TIME : 最后修改时间PARTITION_COMMENT : 注释信息

2.11.4 查看表具有哪几个分区,分区的方法,分区中数据的记录数等信息

select partition_name part,partition_expression expr,partition_description descr,table_rowsfrom information_schema.partitions where table_schema = schema()and table_name = 'foo_range'

2.11.5 显示扫描哪些分区及它们是如何使用的

explain partitions select语句

3.性能对比(分区表和非分区表)

3.1步骤1:创建两张表 part_tab(分区表),no_part_tab(普通表)

create table part_tab(    c1 int default null,    c2 varchar(30) default null,    c3 date not null)partition by range(year(c3))(    partition p0 values less than (1995),    partition p1 values less than (1996),    partition p2 values less than (1997),    partition p3 values less than (1998),    partition p4 values less than (1999),    partition p5 values less than (2000),    partition p6 values less than (2001),    partition p7 values less than (2002),    partition p8 values less than (2003),    partition p9 values less than (2004),    partition p10 values less than (2010),    partition p11 values less than (maxvalue))create table no_part_tab(    c1 int default null,    c2 varchar(30) default null,    c3 date not null)

3.2 步骤2:存储过程

3.2.1 创建存储过程

create procedure load_part_tab()begindeclare v in default 0;while v < 8000000doinsert into part_tabvalues(v,'testingpartitions',aDDDate('1995-01-01',(rand(v)*36520)mod 3652))set v = v + 1;end while;end;

3.2.2 调用存储过程,插入数据

call load_part_tab();

3.2.3 导数据

  • 从part_tab 导入数据到 no_part_tab
insert into no_part_tab select * from part_tab

3.3 步骤3: 进行对比

3.3.1 执行查询速度对比

select count(*) from part_tab where c3 > date '1995-01-01'and c3 < date '1995-12-31';select count(*) from no_part_tab where c3 > date '1995-01-01'and c3 < date '1995-12-31';

3.3.2 扫描次数对比

explainselect count(*) from part_tab where c3 > date '1995-01-01'and c3 < date '1995-12-31';explainselect count(*) from no_part_tab where c3 > date '1995-01-01'and c3 < date '1995-12-31';

4. 分区使用场景

  • 当数据量很大(过T)时,肯定不能把数据再如到内存中,这样查询一个或一定范围的item是很耗时。另外一般这情况下,历史数据或不常访问的数据占很大部分,最新或热点数据占的比例不是很大。这时可以根据有些条件进行表分区。
  • 分区表的更易管理,比如删除过去某一时间的历史数据,直接执行truncate,或者狠点drop整个分区,这比detele删除效率更高
  • 数据量很大,或者将来很大的,但单块磁盘的容量不够或者想提升I0效率的时候,可以把没分区中的子分区挂载到不同的磁盘上。
  • 使用分区表可避免某些特殊的瓶颈,例如Innodb的单个索引的互斥访问…
  • 在某些场景下,单个分区表的备份很恢复会更有效率

总结: 可伸缩性,可管理性,提高数据库查询效率。

小结

🎉 🎉 🎉感谢大家耐心的看完这篇文章,对于SQL在表分区的知识点,我们在MySQL方面已经有五篇内容了,而我们对于MySQL的分区通过这五篇内容也终于可以✅告一段落
如果大家觉着还算可以,那么就给个三连支持一下吧,如果想要继续关注和学习后续更多的内容,就关注一下👨爱书不爱输的程序猿吧,当然,如果大家还有什么其他方面的知识点想要看,可以在评论区或者私信我

请添加图片描述

来源地址:https://blog.csdn.net/qq_40332045/article/details/131862088

您可能感兴趣的文档:

--结束END--

本文标题: 【SQL应知应会】表分区(五)• MySQL版

本文链接: https://lsjlt.com/news/371469.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【SQL应知应会】表分区(五)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • MySQ...
    99+
    2023-08-16
    sql mysql 数据库 oracle 大数据 面试 数据分析
  • 【SQL应知应会】表分区(三)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • MySQ...
    99+
    2023-08-16
    sql mysql 数据库 oracle 大数据 面试 数据分析
  • 【SQL应知应会】表分区(四)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • MySQ...
    99+
    2023-08-16
    sql mysql oracle 数据库 大数据 数据分析 面试
  • 【SQL应知应会】表分区(一)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • MySQ...
    99+
    2023-08-20
    sql mysql 数据库 oracle 大数据 数据分析 分区
  • 【SQL应知应会】索引(一)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL...
    99+
    2023-08-16
    sql mysql 数据库 oracle 大数据 面试 索引
  • 【SQL应知应会】索引(二)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL...
    99+
    2023-08-16
    sql mysql oracle 数据库 大数据 面试 索引
  • 【SQL应知应会】行列转换(二)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 行列转换 • Mys...
    99+
    2023-08-25
    mysql adb 数据库 大数据 oracle 数据分析
  • mysql 5.6分区表应用
    mysql 5.6分区表测试:DROP TABLE IF EXISTS `my_orders`;CREATE TABLE `my_orders` (  `id` int(10) unsig...
    99+
    2024-04-02
  • MySQL分区表有哪些知识点
    本篇内容介绍了“MySQL分区表有哪些知识点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL分区表...
    99+
    2024-04-02
  • 【SQL应知应会】索引(三)• MySQL版:聚簇索引与非聚簇索引;查看索引与删除索引;索引方法
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL...
    99+
    2023-08-24
    sql mysql 数据库 oracle 大数据 面试
  • 一文搞懂mysql的分区和分表知识
    下面一起来了解下mysql的分区和分表,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql的分区和分表这篇短内容是你想要的。mysql分表和分区1.mysql分表什么是分表?分表是将一个大表按照一定...
    99+
    2024-04-02
  • MySql分表、分库、分片和分区知识点有哪些
    这篇文章主要介绍了MySql分表、分库、分片和分区知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言   ...
    99+
    2024-04-02
  • MySql分表、分库、分片和分区知识深入详解
    一、前言 数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表。 二、分片(类似分库) 分片是把数据库横向扩展(Scal...
    99+
    2024-04-02
  • 数据库中分区表如何删除分区、分区对应的tablespace、datafile
    这篇文章给大家分享的是有关数据库中分区表如何删除分区、分区对应的tablespace、datafile的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 ...
    99+
    2024-04-02
  • mysql分区的应用场景是什么
    本篇内容介绍了“mysql分区的应用场景是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明最佳场景数据的时间序列性较强,则可按时间进行...
    99+
    2023-06-20
  • 如何实现MySQL底层优化:表分区的应用和优势
    如何实现MySQL底层优化:表分区的应用和优势随着大数据时代的到来,数据库的性能需求也越来越高。MySQL作为常用的关系型数据库,为了满足大规模数据存储和高并发访问的需求,提供了表分区的功能。本文将介绍如何实现MySQL底层优化中的表分区,...
    99+
    2023-11-08
    MySQL 优化 分区
  • MySQL视图与表的区别及应用场景
    MySQL视图与表的区别及应用场景 MySQL中的视图(View)是一种虚拟表,它是基于 SQL 查询结果集的可视化表格,可以像表一样查询、更新或操作。视图在数据库设计中扮演着重要的角...
    99+
    2024-04-02
  • 关于CSS 3应该知道的五项新技术分别是什么呢
    本篇文章为大家展示了关于CSS 3应该知道的五项新技术分别是什么呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。CSS是众所周知且应用广泛的网站样式语言,在新版本C...
    99+
    2024-04-02
  • MySQL中应用无感知设计的示例分析
    这篇文章主要介绍MySQL中应用无感知设计的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!session_track_transaction_info参数参数介绍MySQL5...
    99+
    2024-04-02
  • MySQL性能调优之分区表的知识点有哪些
    本篇内容主要讲解“MySQL性能调优之分区表的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL性能调优之分区表的知识点有哪些”吧!对于用户而...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作