Mysql优化-经验分享

news2025/1/14 18:03:10

目录

      • 什么是索引
      • 索引类型
        • 主键索引
        • 唯一索引
        • 组合索引
        • 前缀索引
        • 全文索引
        • 空间索引
      • 索引的数据结构
        • HASH表
        • 二叉树
        • 平衡二叉树
        • 红黑树
        • B树
        • B+树
      • 索引的存储引擎
        • MyISAM
        • InnoDB
      • 索引优化方向
        • 分层
        • SQL优化
        • 表设计
          • 三范式
          • 索引合理使用
        • 服务器优化
          • 内存升级
          • 碎片优化
        • 工具的使用
          • explain
          • show processlist
          • show profile
          • performance_schema
          • show processlist
          • show profile
          • performance_schema

先简单介绍一下基础部分

什么是索引

  1. 帮助MYSQL高效快速获取数据的一种数据结构
  2. 对数据库表中的一列或多列值进行排序

说明:以空间换取时间 维护索引结构

索引类型

主键索引

primary key

表数据主键,自动创建索引

说明:主键必不可少

唯一索引

unique key

索引列数据必须保证唯一,允许为空

说明:不建议为空,可指定为空字符。因为考虑索引的空间占用:允许为null时,需要额外一个字节保留是否为空。

组合索引

多个列组成一个索引

前缀索引

文本类型,允许指定索引列的长度

全文索引

fulltext key

用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的INDEX 也可以。

用法:MATCH(xxx) AGAINST(xxx)

传送门

空间索引

spatial key
5.7以后支持空间索引,支持OpenGIS几何数据模型

说明:

单索引长度限制:5.6里面默认不能超过767bytes,5.7不超过3072bytes

5.6可以调整配置,放开767长度限制,但是最多也不能超过3072

传送门

一般前三种用的比较多,后面三种使用比较少。

索引的数据结构

HASH表

使用key-value键值对方式存储数据。key存储列数据,value存储存储记录或者磁盘地址,点查命中数据

说明:存在hash冲突,命中地址后,循环链表查询数据

优点:不考虑hash冲突情况下,时间复杂度为O(1)

缺点:

  • 不支持范围查询,需要全表扫描完成集合搜索

  • hash冲突之后,时间复杂度变成了O(n)

二叉树

每个节点最多两个分支节点且左小右大。使用二分算法查找,减少IO
优点:理想情况二分查找,减少IO

缺点:

  • 结构不稳定
  • 数据查找复杂度受树的深度影响

平衡二叉树

子树之间高度差不能超过1,通过左旋,右旋保证树平衡

优点:结构稳定

缺点:

  • 需要频繁的自旋来保证树结构的平衡,读写性能不平衡
  • 不支持快速范围查询,需要遍历树节点
  • 数据查找复杂度受树的深度影响

红黑树

子树之间高度差不能超过2倍,通过左旋,右旋,节点变色保证树平衡

优点:读写性能接近平衡

缺点:

  • 不支持快速范围查询,需要遍历树节点
  • 数据查找复杂度受树的深度影响

传送门

B树

所有叶子节点都在同一层的平衡多叉树
优点:

  • 支持范围查询
  • 数的深度可以控制
  • 数据块利用率较高【16k的数据量:16*16*16=4096】

不足:mysql数据块使用率还不够高

传送门

B+树

b树的改进版,非叶子节点不存储数据

优点:

a.叶子节点存储数据,充分使用了数据块

b.减少了IO查询,只需要查询叶子节点的数据

传送门

算法延时动态演示:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

索引的存储引擎

MyISAM

特点:

  1. 数据与索引是分开存放的,只有非聚簇索引【MYD 数据文件、MYI 索引文件、frm 文件结构[表结构]】
  2. 不支持事务
  3. 不支持主外键
  4. 表锁

传送门

InnoDB

特点:

  1. 数据文件与索引放在一起的,聚簇数据结构【frm 文件结构、ibd 数据和索引】
  2. 支持事务
  3. 行锁、表锁

传送门

image.png

索引优化方向

分层

  • 连接层
  • 服务层
  • 引擎层
  • 存储层

img

SQL优化

  • 数据点查:等值查询最快

  • 最左匹配原则:组合索引的使用

  • 索引列不做计算:计算索引失效

  • 覆盖索引:非聚簇索引直接返回数据,说明:回表

  • null值判断:非空字段做空判断

  • or导致的索引失效:索引列与非索引列查询导致索引失效

  • 字段类型不匹配:字符类型未做匹配

  • 索引下推:5.6以后新增

  • group by:临时表、文件排序

表设计

三范式
  1. 第一范式:所有列不存在再次重复拆分
  2. 第二范式:非主键列和主键完全依赖
  3. 第三范式:所有列和主键直接依赖

传送门

注:三范式按实际情况来,不一定要全部满足,比如有时候适当冗余字段比连表查询效果更好。

索引合理使用
  1. 数据量较小的表不适用索引
  2. 频繁更新的列不合适用索引
  3. 重复度较高的列不适合索引【*】
  4. 关联查询字段创建索引

注:第三条还是得按实际情况来,有时候加上确实比不加要快。

服务器优化

内存升级

cache缓存块、数据集过滤都依赖内存

碎片优化

数据删除会造成不连续的空白空间

传送门

工具的使用

explain

SQL执行计划,优化SQL

传送门

show processlist

查询SQL执行情况

传送门

show profile

查看执行耗时

传送门

performance_schema

传送门
/1093229)

show processlist

查询SQL执行情况

传送门

show profile

查看执行耗时

传送门

performance_schema

传送门

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

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

相关文章

基于单片机的音乐盒

本设计是基于单片机的音乐盒,主要实现以下功能: 1,可通过按键控制音乐的选择、声音的大小和开始/停止播放; 2,通过MP3模块播放音乐; 3,可通过蓝牙连接手机,用手机远程控制&#xff…

书法比赛评分系统-JAVA【数据库设计、源码、开题报告】

1 引言 1.1 选题背景及意义 书法艺术,是中国的国粹;是经过数千年历史积淀和先哲们上下求索而形成的灿烂的文化瑰宝;是囊括了人与天地之间的大学问;是中华民族智慧的结晶;是最具中国特色的文化艺术门类。它不仅在中国,而且在世界上也享有极高的荣誉&…

Spring Boot 自定义配置元数据

Spring Boot 自定义配置元数据 概述 开发Spring Boot应用程序时, 可以把 application.properties文件中的配置属性直接转换为 Java Bean对象。这也是Spring Boot 约定大于配置的理念的体现,通过框架内置的各种属性按照不同的需求进行排列组合,满足特定…

Spring Boot Admin2 @EnableAdminServer的加载

其他相关文章&#xff1a; 1、Spring Boot Admin 参考指南 2、SpringBoot Admin服务离线、不显示健康信息的问题 首先根据官网的“快速开始”&#xff0c;快速搭建一个Spring Boot Admin Server项目 1、添加Spring Boot Admin启动器到依赖 pom.xml <dependency><grou…

低代码会使初级码农失业吗?

低代码的目的是提升效率&#xff0c;不是压榨生存空间。低代码不代表低技术&#xff0c;所以低代码并不会导致初级码农失业&#xff0c;实际上不仅不会导致失业&#xff0c;还帮助更多人走上了“开发者”岗位。 何为低代码&#xff1f; 所谓“低代码”&#xff08;Low-Code&a…

day29 SQL注入增删改查盲注延时布尔报错

前言 #知识点&#xff1a; 1、明确查询方式注入Payload 2、明确查询方式注入产生功能 3、明确SQL盲注延时&布尔&报错 #详细点&#xff1a; 盲注就是在注入过程中&#xff0c;获取的数据不能回显至前端页面。 此时&#xff0c;我们需要利用一些方法进行判断或者尝…

基于JAVA的房屋租赁系统平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427640 租户在租房过程中如何才能保护自己的合法权益? 出租方在租房过程中又如何证明房屋的所属关系?种种租赁相关话题&#xff0c;成了当下关注的民生热点&#xff0c;为了切实解决人民群…

BUUCTF Reverse/[GXYCTF2019]simple CPP

BUUCTF Reverse/[GXYCTF2019]simple CPP 先看文件信息&#xff0c;是个64位的程序&#xff0c;且没有加壳 IDA64位打开 int __cdecl main(int argc, const char **argv, const char **envp) {bool v3; // si__int64 v4; // rax__int64 v5; // r8__int64 v6; // r8unsigned __in…

【ESP32_8266_MQTT篇】

文章目录MQTT介绍1 MQTT历史2 MQTT版本MQTT介绍 MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范&#xff0c;易于实现。这些特点使得它对很多场景来说都是很好的选择&#xff0c;特别是对于受限的环境如机器与机器的通信&…

Java面向对象的特点之:继承

对于继承&#xff0c;当大家看到这个词语的时候&#xff0c;在现实生活中&#xff0c;想必也会自然而然的想到了&#xff1a;继承家产&#xff1f;&#xff1f;那么&#xff0c;在Java的面向对象的时候&#xff0c;也存在这样的思想&#xff01;&#xff01; 下面笔者来带领大…

【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍

文章目录 1.概述2. LocalVariablesSorter#2.1 class info2.2 fields2.3 constructors2.4 methods2.4.1 newLocal method2.4.2 local variables method3.工作原理3.1 添加新変量3.2处理旧变量4.总结1.概述 在上一节文章中:【ASM】字节码操作 工具类与常用类 LocalVar

深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow_GPU版本安装、实现)

基于TensorFlow的鸢尾花分类实现0 引言1 基本介绍和环境搭建1.1关于TensorFlow-GPU环境搭建第一步:安装Anaconda&#xff1a;第二步&#xff1a;安装GPU版本需要&#xff0c;明确显卡型号第三步&#xff1a;打开conda终端建立Tensorflow环境第四步&#xff1a;激活虚拟环境&…

最简单例子解释python的transpose函数

二维数组的transpose就是矩阵的转置&#xff0c;这里直接略过。直接讨论三维情况。 首先&#xff0c;我们要弄清楚transpose的轴是什么意思&#xff1f; 0是代表了第一个轴&#xff0c;1是代表了第二个轴&#xff0c;2是代表了第三个轴&#xff0c;这里我们用x&#xff0c;y&…

基于PHP+MySQL米步童鞋商城网站的设计与实现

随时时代的发展,更多的宝妈们希望给宝宝买鞋子的时候能够通过更加简单方便的方式来进行,因为宝妈每天都要面对很多的时候,不能够经常到商场闲逛,所以她们急需一种通过互联网的方式来购买童鞋,所以我们通过PHP语言和MySQL数据开发了米步童鞋商城网站 米步童鞋商城网站的主要功能…

认识JUC

JUC 一、Java JUC 简介 在 Java 5.0 提供了 java.util.concurrent &#xff08;简称 JUC &#xff09;包&#xff0c;在此包中增加了在并发编程中很常用 的实用工具类&#xff0c;用于定义类似于线程的自定义子 系统&#xff0c;包括线程池、异步 IO 和轻量级任务框架。 提供…

基于阈值预分割的区域生长分割法研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、区域生长原理✳️ 三、基于阈值预分割的区域生长算法✳️ 四、确定生长准则✳️ 五、实验结果✳️ 六、参考文献✳️ 七、Matlab代码获取✳️ 一、引言 在区域分割处理技术之中&#xff0c;又包含有区域生长分割技术以及区域分裂合并分割…

车辆工程的入门学习

知乎 汽车控制需要了解的 汽车的行驶阻力与驱动力 做好汽车控制需要学什么 车辆控制工程 off-road vehicle 越野车 各智能系统介绍 制动防抱死系统&#xff08;anti-lock brake system, ABS&#xff09; 电子稳定性控制&#xff08;electronic stability control&#xff0c;…

SAP ADM100-1.1之SAP系统架构

一、SAP系统组成结构 SAP系统包括一个逻辑数据库、一个或多个实例。实例(也称为Central Instance中央实例)与数据库一起形成功能性的SAP系统。在每个SAP系统中都应该配置一个Central Instance中央实例。如果系统中仅有一个单实例那就存在“中央系统”,并且与它的数据库运行在…

上海亚商投顾:沪指冲高回落 中字头板块爆发领涨

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪沪指今日冲高回落&#xff0c;3100点得而复失&#xff0c;黄白二线分化严重&#xff0c;权重走强题材弱势&#xff…

[附源码]java毕业设计校园跑腿系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…