【MySQL进阶之路 | 高级篇】优化数据库结构和大表优化

目录结构:

目录

目录结构:

1. 优化数据库结构

1.1 拆分表:冷热数据分离

1.2 增加冗余字段

1.3 优化数据类型

情况1:对整数类型数据进行优化

情况2:既可以使用文本类型也可以使用整数类型的字段,要选择使用整数类型

1.4 优化查询记录的速度

A. MyISAM引擎的表

1. 禁用索引

2. 禁用唯一性检查

B. InnoDb引擎的表

1. 禁用唯一性检查

2. 禁用外键

3, 禁止自动提交

1.5 使用非空约束

1.6 分析表,检查表和优化表


1. 优化数据库结构

一个好的数据库设计方案对于数据库的性能能常常会起到事半功倍的效果。合理的数据库结构不仅仅使数据库占用更小的磁盘空间,而且能使查询速度更快。数据库结构的设计需要考虑数据冗余,查询和更新的速度,字段的数据类型是否合理等多方面的内容。

1.1 拆分表:冷热数据分离

拆分表的思路是,把一个包含很多字段的表拆分为两个或多个相对较小的表。这样做的目的是,这些表中某些字段的操作频率很高(热数据),经常要进行查询或更多操作,而另外一些字段的使用频率却很低(冷数据)。冷热数据分离,可以减少表的宽度。如果放在一个表里,每次查询都要读取大的记录,会消耗较多的资源。

MySQL限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节。表越宽,把表载进内存缓冲池所占用的内存也就越大,也会消耗更多的IO。冷热数据分离的目的就是:减少磁盘IO;保证热数据的内存缓存命中率。更有效利用缓存,避免读入无用的冷数据。

1.2 增加冗余字段

设计数据表时应尽量遵守范式理论的制约,尽可能减少冗余字段,让数据库设计看起来精致,优雅。但是,合理加入冗余字段可以提高查询速度。

表的规范化程度越高,表与表之间的关系也越多,需要连接查询的情况也越多,尤其在数据量大的情况下,而且需要频繁进行连接的时候,为了提高效率,我们也可以考虑增加冗余字段来减少连接。

1.3 优化数据类型

改进表的设计时,可以考虑优化字段的数据类型。优先选择符合存储要求的最小数据类型。

列的字段越大,建立索引时的所需的空间也就越大,这样一页中所能存储的索引节点的数量也就越少,在遍历时需要的IO次数也就越多,索引的性能也就越差。

具体来说:

情况1:对整数类型数据进行优化

遇到整数类型的字段可以用INT类型。这样做的理由是,INT型的数据有足够大的取值范围,不用担心数据超出范围的问题。对于非负型的数据(比如自增ID,整形IP)来说,要优先使用无符号整型UNSIGNED来存储。因为无符号相对于有符号,同样的字节数,存储的数值更大。

情况2:既可以使用文本类型也可以使用整数类型的字段,要选择使用整数类型

根文本类型数据相比,大整数往往占用更少的存储空间。因此,在存取和比对的时候,可以占用更少的内存空间。所以,在二者皆可用的前提下,尽量使用整数类型,这样可以提高查询效率。

1.4 优化查询记录的速度

插入记录时,影响插入速度的主要是索引,唯一性校验,一次插入记录条数等。根据这些情况可以分别进行优化。这里我们分为MyISAM和InnoDB存储引擎来讲。

A. MyISAM引擎的表

1. 禁用索引

对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引,如果插入大量数据,建立索引就会降低插入记录的速度。为了解决这样情况,可以在插入记录之前禁用索引,数据插入完毕后再开启索引。禁用索引的语句如下:

alter table table_name DISABLE KEYS;

重新开启索引的语句如下:

alter table table_name ENABLE KEYS;

若对于空表批量导入数据,则不需要进行该操作,因为iMyISAM引擎的表是导入数据以后才建立索引的。

2. 禁用唯一性检查

插入数据时,MySQL会对插入的记录进行唯一性检验。这种唯一性校验会降低插入记录的速度。为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启,禁用唯一性检查的语句如下:

SET UNIQUE_CHECKS=0;

B. InnoDB引擎的表

1. 禁用唯一性检查

插入数据之前执行SET UNIQUE_CHECKS=0;来禁止读唯一性索引的检查,数据导入完毕后再运行开启唯一性检查。这个和上述使用方法一样。

2. 禁用外键

插入数据之前执行禁止对外键的检查,数据插入完毕后再恢复对外键的检查。

3, 禁止自动提交

插入数据之前禁止事务自动提交,数据导入完成后,恢复自动提交。语句如下

set autocommit=0;

1.5 使用非空约束

在设计字段的时候,如果业务允许,建议尽量使用非空约束。这样的好处是:

  1. 在进行比较和计算时,省去要对NULL值字段判断是否为空的开销,提高存储效率。
  2. 非空字段也容易创建索引。因为i索引NULL列需要额外的空间来保存,所以需要占用更多的空间。使用非空约束,就可以节省存储空间。

1.6 分析表,检查表和优化表

MySQL提供了分析表,检查表和优化表的语句。分析表主要是分析关键字的分布,检查表主要是检查表的错误,优化表主要是消除删除或者更新造成的空间浪费。

2. 大表优化

当MySQL单表记录过大时,数据库的CURD性能会明显下降,一些常见的优化措施如下:

2.1 限定查询的范围

禁止不带任何限制数据范围条件的查询语句。

2.2 读/写分离

经典的数据库拆分方案,主库负责写,从库负责读。

1. 一主一从模式:

66071f92a44e42308073cf9c5b5015b2.png

2. 双主双从模式:

2.3 垂直拆分

当数据量达到千万级以上时,有时候我们需要把一个数据库切成多份,放到不同的数据库服务器上,减少对单一服务器的访问压力。

  • 如果数据库中的数据表过多,可以采用垂直分库的方式,将关联的数据表部署在同一个数据库上。
  • 如果数据表中的列过多,可以采用垂直分表的方式,将一张数据表拆成多张表,把经常一起使用的列放到一张表里。

垂直拆分的优点:可以使得列数据变小,在查询的时候减少读取的Block数,减少IO次数。此外,垂直分区可以简化表结构,易于维护。

垂直拆分的缺点:主键会出现冗余,需要管理冗余列,并引起JOIN关联表的操作。此外,垂直拆分也会让事务变得更加复杂。

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

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

相关文章

LeetCode热题100刷题17:124. 二叉树中的最大路径和、437. 路径总和 III、199. 二叉树的右视图

124. 二叉树中的最大路径和 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nul…

Github 2024-07-17 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目3Python项目3Rust项目2TypeScript项目2MDX项目1项目化学习 创建周期:2538 天协议类型:MIT LicenseStar数量:161973 个Fork数量…

基于51单片机的指纹红外密码电子锁

基于51单片机的指纹红外密码电子锁 1、系统功能介绍2、演示视频3、系统框图4、系统电路介绍4.1、STC89C52单片机最小系统设计4.2、LCD12864显示屏电路设计4.3、矩阵键盘按键控制部分电路设计4.4、AS608指纹模块电路设计 5、程序设计5.1、LCD12864屏幕初始化5.2、AT24C02存储芯片…

打造直播工具详解:从零开始开发直播美颜SDK

今天,笔者将详细讲解如何从零开始开发一个直播美颜SDK,帮助开发者了解开发过程中的关键环节和技术要点。 一、需求分析与规划 在开发之前,首先需要明确美颜SDK的功能需求。一般来说,美颜SDK应包含以下几个核心: 基础…

【TAROT学习日记】韦特体系塔罗牌学习(7)——恋人 THE LOVERS VI

韦特体系塔罗牌学习(7)——恋人 THE LOVERS VI 目录 韦特体系塔罗牌学习(7)——恋人 THE LOVERS VI牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位牌意1. 关键词/句2. …

MS17-010漏洞复现+利用

1、 漏洞简述 漏洞名称:“永恒之蓝”漏洞 漏洞编号:MS17-010,CVE-2017-0143/0144/0145/0146/0147/0148 漏洞类型:缓冲区溢出漏洞 漏洞影响:信息泄露 CVSS评分:9.3(High) 利用难…

食家巷擀面皮:一口惊艳的传统美味

在美食的世界里,总有一些经典让人难以忘怀,食家巷擀面皮便是其中之一。食家巷擀面皮,那一张张薄而有劲道的面皮,宛如艺术品般细腻。它的外观晶莹剔透,散发着诱人的光泽,让人看一眼就忍不住想要品尝。制作擀…

Vue使用FullCalendar实现日历/周历/月历

Vue使用FullCalendar实现日历/周历/月历 需求背景:项目上遇到新需求,要求实现工单以日/周/月历形式展示。而且要求不同工单根据状态显示不同颜色,一个工单内部,需要以不同颜色显示三个阶段。 效果图 日历 周历 月历 安装插件…

MySQL学习——影响选项文件处理的命令行选项

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件处理,所以必须在命令行上给出,而不是在选项文件中给出。为了正常工作,这些选项中的每一个都必须在其他选项之前给出,但以下情况除外: 打印默…

力扣第二十五题——K个一组反转链表

内容介绍 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内…

1万6千多传统文化之古代地名大全ACCESS\EXCEL数据库

继续采集传统文化数据,之前采集过《传统文化之非物质文化大全ACCESS数据库》、《名人大全古今人物ACCESS数据库》、《传统文化之民俗文化大全ACCESS数据库》,今天的是古代地名查询: 截图下方有显示“共有记录数”,截图包含了表的所…

IP协议和路由转发

文章目录 IP协议IP报头网段划分特殊的IP私有IP和公有IP IP分片 路由 IP协议 IP协议提供了一种能力,将数据报从A主机送到B主机,TCP可以保证可靠性,所以TCP/IP协议可以将数据可靠的从A主机送到B主机。 IP报头 4位版本号(version): 指定IP协议…

Unity Shader - 2024 工具篇

目录 IDE 工具建议 IDE工具 Sublime 3 大势所趋,但是Sublime 使用插件还是相当的不习惯 代码跳转 Go to definite IDE 工具建议 () what is the best ide for coding shaderlab - #4 by DaveAstator - Unity Engine - Unity Discussions​​​​​​​I IDE工…

修复SteamUI.dll加载失败的指南,快速修复failed to load steamui.dll

在使用Steam平台进行游戏下载、安装和运行时,可能会遇到一些系统错误,比如“failed to load steamui.dll”。这个错误通常意味着Steam的用户界面库文件steamui.dll出现了问题。本文将详细介绍steamui.dll文件的相关信息以及如何修复这一问题。 一.什么是…

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题(如账号被盗、邮件系统存在安全漏洞等)不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

Java响应式编程库Reactor的介绍和基本使用

关于响应式编程的概念和介绍可以参考: 响应式编程(Reactive Programming)是什么? Java语言中,RxJava和Reactor是实现响应式编程的两个最流行的库,因为 Spring 5 及更高版本中,Reactor 是 Spring WebFlux 的底层实现框架,用于构建响应式 Web 应用,所以相比而言,Reactor…

充电桩浪涌保护方案—保障充电设施安全稳定运行的关键

在当今新能源汽车蓬勃发展的时代,充电桩作为电动汽车的“加油站”,其重要性不言而喻。然而,由于其复杂的电气环境和暴露于户外的特点,充电桩容易受到浪涌的影响。浪涌可能来自雷电、电网故障、大功率设备的启停等,对充…

JS+H5可视化广度优先算法

源码在效果图后面 可标记 障碍 起始点 终点 点击寻路按钮后&#xff0c;表格上会自动出现一条蓝色最佳路径&#xff08;加了一格一格显示的动画&#xff09; 以下是效果图 橙色起点 绿色终点 红色障碍物 以下是寻路结果 源代码 <!DOCTYPE html> <html lang&quo…

html+css前端作业 王者荣耀官网6个页面无js

htmlcss前端作业 王者荣耀官网6个页面无js 下载地址 https://download.csdn.net/download/qq_42431718/89571150 目录1 目录2 项目视频 王者荣耀6个页面&#xff08;无js&#xff09; 页面1 页面2 页面3 页面4 页面5 页面6

Camtasia2024官方下载安装激活教程+免费永久许可证秘钥激活码

在这个数字化内容层出不穷的时代&#xff0c;视频的力量日益凸显。无论是用于教育教学、企业培训、内容创作&#xff0c;还是记录生活中的精彩瞬间&#xff0c;一款强大且易用的视频编辑软件都至关重要。今天&#xff0c;让我们一同走进 Camtasia 2024 的精彩世界&#xff0c;探…