文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-16 14:40

关注

请添加图片描述

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

本文收录于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 MULL。

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 导数据

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. 分区使用场景

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

小结

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

请添加图片描述

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯