冲刺学习-MySQL-常见问题

news2024/11/27 14:48:22

MySQL索引的最左原则

联合索引的说明

  • 建立三个字段的联合索引
  • 联合索引(a,b,c)相当于建立了索引:(a),(a,b),(a,b,c)

那么ac是否能用到索引呢?

a可以命中联合索引(a,b,c),c无法命中,所以ac组合无法命中联合索引

什么是最左前缀匹配原则?

对于索引中的字段,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,c,d)的索引则都可以用到,a,b,d的顺序可以任意调整。
= 和 in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化索引可以识别的形式

index类型

表示mysql会对整个该索引进行扫描。只要是索引,mysql都会采用index类型的方式进行扫描。但是效率不高,mysql会从索引中的第一个数据查到最后一个数据,直到查到结果

ref类型

表示mysql根绝特定算法快速找到符合条件的索引,二不是对索引的每一个数据都进行扫描判断。要实现这种快速的查询,就需要满足特定的数据结构
索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引

复合索引

首先会对索引最左边的字段的数据进行排序,在第一个字段的排序基础上,然后再对后面的第二个字段进行排序
所以第一个字段是绝对有序的,而第二个字段是无序的了,如果直接使用第二个字段去查,进行条件判断是用不到索引的

当第一个字段进行了等值判断,那么第二个字段进行排序,也可以用到索引。当两个都是等值判断时,顺序是可以改变的,而且不影响结果
mysql查询优化器

InnoDB和MyIsam引擎的区别?

区别

数据的存储结构不同

  1. 每个MyISAM在磁盘上存储成三个文件,它们以表的名字开头来命名。.frm文件存储定义,.MYD(MYD)存储数据文件,.MYI(MYindex)存储索引文件。由于索引和文件数据是分开存储的,所以查询时MyISAM的叶子节点存储的是数据所在的地址,而不是数据
  2. InnoDB在磁盘上保存为两个文件。.frm文件同样存储为表结构文件,.ibd文件存储的是数据和索引文件。InnoDB叶子节点存储的是整个数据行所有的数据

存储空间的消耗不同

  1. MySIAM可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去除掉)、动态表、压缩表
  2. InnoDB需要更多的内存和存储,它会在主内存中建立专有的缓冲池用于高速缓冲数据和索引。InnoDB所在的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

对事务的支持情况不同

  1. MySIAM强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持
  2. InnoDB除了提供事务支持和外部键等高级数据库功能。还具有事务提交、回滚和崩溃修复能力等这些事务安全型表

对锁的支持态度

  1. 如果只是执行大量的查询,MyISAM是更好的选择。MyISAM在增删的时候需要锁定整个表格,效率会低一些
  2. InnoDB支持行级锁,删除插入的时候只需要锁定操作行就行。如果有大量的插入、修改删除操作,使用InnoDB性能会更高

对外键的支持不同

MyISAM不支持外键,而InnoDB支持外键。当然,各种不同MySQL版本对两者的支持都有所改进

是否为聚集索引

InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的;MyISAM是非聚集索引,它也是使用B+Tree作为索引结构,但是索引和数据文件是分离的,索引保存的是数据文件的指针

是否必须要主键

InnoDB必须要有主键,MyISAM可以没有主键。InnoDB如果我们没有明确去指定创建主键索引。它会帮我们创建一个隐藏的6byte的int类型的索引作为主键索引

辅助索引于主键索引之间的关系

  1. InnoDB辅助索引和主键索引之间存在层级关系,InnoDB如果添加其他辅助索引,辅助索引查询就需要两次查询,先查询到主键,然后再通过主键查询到数据。因此主键太大,其他索引也相应的会很大
  2. MyISAM则是平级关系。

InnoDB不保存具体行数

InnoDB执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行前面的命令会更快

Innodb不支持全文索引,而MyISAM支持全文索引,在全文索引领域的查询效率上MyISAM速度更快高;

InnoDB 的行锁是实现在索引上的,而不是锁在物理行上。如果访问未命中索引,也是无法使用行锁,将会退化为表锁

InnoDB支持表级锁、行级锁,默认为行级锁;而 MyISAM 仅支持表级锁

有哪些优化数据库性能的方法?

优化可以从这四个方面入手:结构优化、硬件优化、DB优化、SQL优化
位置越靠前优化越明显,对数据库的性能提升越高。我们常说的SQL优化反而是对性能提高最小的优化。

架构优化

  • 分布式缓存(高并发、大数据量大场景)
    当接收到查询请求后,我们先查询缓存,判断缓存中是否有数据,有数据就直接返回给应用,如若没有再查询数据库,并加载到缓存中,这样就大大减少了对数据库的访问次数,自然而然也提高了数据库性能。
  • 读写分离(数据库读性能问题)
    一主多从,读写分离,主动同步,是一种常见的数据库架构优化手段。
    主库,提供数据库写服务;从库,提供数据库读能力;主从之间,通过binlog同步数据。
  • 水平切分(数据库数据量大的问题)
    当你的应用业务数据量很大,单库容量成为性能瓶颈后,采用水平切分,可以降低数据库单库容量,提升数据库写性能。

硬件优化

DB优化

SQL优化

  • 合理使用索引
  • 使用UNION ALL代替UNION
  • 避免select * 写法
  • JOIN字段建议建立索引
  • 避免复杂的SQL语句
  • 避免where 1=1语句
  • 避免order by rand()类似写法

八种经典优化方法

  • 选取合适的字段属性
  • 使用连接(JOIN)来代替子查询(Sub-Queries)
  • 使用联合(UNION)来代替手动创建的临时表
  • 事务
  • 锁定表
  • 使用外键
  • 使用索引
  • 优化的查询语句
    其他:http://t.csdnimg.cn/Sw8fj

如何定位慢查询?

慢查询

通常是指执行时间较长的SQL查询语句,但是时间的界限因数据库和应用程序的不同而异

如何定位

  1. 开启慢SQL统计:
SET GLOBAL slow_query_log = on; //开启慢SQL统计开关
  1. 设置判断为慢sql的阈值(单位秒):
SET GLOBAL long_query_time = 1;
  1. 设置日志位置:
set global slow_query_log_file="D:\\slow.log";

性能分析

  • 使用explain关键字来对SQL进行性能分析,结果集包含一下参数
    在这里插入图片描述

MySQL支持行锁还是表锁?分别有哪些优缺点?

MySQL即支持行锁,也支持表锁,准确的说,应该是:InnoDB支持行锁和表锁;MyISAM不支持行锁

行锁

  • 优点:
    • 锁定粒度最小
    • 发生锁冲突的概率最低
    • 并发度也最高
  • 缺点:
    • 行锁开销大
    • 加锁慢
    • 会出现死锁

表锁

  • 优点:
    • 资源消耗比较少
    • 加锁块
    • 不会出现死锁
  • 缺点:
    • 触发锁冲突的概率最高
    • 并发度最低

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

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

相关文章

【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 刷题篇 一、二叉树的中序遍历1.1 题目描述1…

分布式共识算法及落地

摘要 本文介绍常见的分布式共识算法&#xff0c;使用场景&#xff0c;以及相关已经落地了的程序或框架 1. 为什么要分布式共识算法 在分布式系统中&#xff0c;不同节点之间可能存在网络延迟、故障等原因导致彼此之间存在数据不一致的情况&#xff0c;为了保证分布式系统中的…

【Qt】消息机制和事件

文章目录 事件event()事件过滤器案例&#xff1a;检测鼠标事件案例&#xff1a;定时器 事件 事件&#xff08;event&#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事…

微信小程序进阶——后台交互个人中心授权登录

目录 一、小程序登录微信登录接口演示 1.1 项目导入 1.2 method1 1.3 method2 二、小程序授权登录 2.1 登录过程 2.1.1 详解 2.1.2 图解 2.2 后端代码导入 2.3 前端代码导入 ​编辑 2.4 案例演示 前端代码如下&#xff1a; 2.4.1 前端调用接口地址 2.4.2 个人中…

Power BI 傻瓜入门 5. 准备数据源

本章内容将介绍&#xff1a; 定义Power BI支持的数据源类型探索如何在Power BI中连接和配置数据源了解选择数据源的最佳做法 现代组织有很多数据。因此&#xff0c;不用说&#xff0c;微软等企业软件供应商已经构建了数据源连接器&#xff0c;以帮助组织将数据导入Power BI等…

瑞萨e2studio(27)----使用EZ-CUBE3烧录

瑞萨e2studio.27--使用EZ-CUBE3烧录 概述视频教学样品申请引脚配置EZ-CUBE3 仿真器开关设置对RA族MCU进行Flash编程蓝色 LED 指示灯的状态信息 概述 EZ-CUBE3&#xff08;CYRCNEZCUBE03&#xff09;是具有Flash存储器编程功能的片上调试仿真器&#xff0c;可以用于调试MCU程序…

合同管理怎么做?套用Excel合同管理台账模板,真可以省心省力!

对于从事日常行政办公管理的人来说&#xff0c;最难受得就是各种合同乱糟糟&#xff0c;合同数据又多又杂&#xff0c;一不小心就会出错&#xff0c;而且有的合同数据到期了我们太忙也不知道&#xff0c;所以就很麻烦…… 想做好合同台账&#xff0c;其实很简单&#xff0c;今天…

基于stm32控制的ESP8266在设备模式下通讯

一、文章中要用的指令 指令作用ATUART115200,8,1,0,0之前的51通讯是9600&#xff0c;这里的321用的是115200&#xff0c;需要改一下波特率ATCWMODEXX是1代表station&#xff08;设备&#xff09;模式 &#xff0c;X是2代表AP&#xff08;路由&#xff09;模式 &#xff0c;X是…

微信小程序之个人中心授权登录

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.了解微信授权登录 微信登录官网&#xff1a; 小程序登录https://developers.weixin.qq.com/miniprogram/d…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml(包括源码+网络结构图)

前言:Hello大家好,我是小哥谈。配置文件yolov5s.yaml在YOLOv5模型训练过程中发挥着至关重要的作用,属于初学者必知必会的文件!在YOLOv5-6.0版本源码中,配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小…

5G技术的飞速发展:连接未来

随着科技的日益进步&#xff0c;5G通讯技术已经成为了全球科技领域的热门话题。5G&#xff0c;即第五代移动通信技术&#xff0c;带来的不仅仅是更快的网络速度&#xff0c;它的高带宽和低延迟特性将为未来的数字世界奠定基础。 速度与效率的飞跃: 5G技术的最大亮点是它极高的下…

App分发的策略和注意事项

当今的数字化时代中&#xff0c;移动应用程序已经成为了人们生活中不可或缺的一部分。随着智能手机的普及和移动互联网的快速发展&#xff0c;应用程序的分发方式也变得越来越多样化。 App分发是指将移动应用程序通过特定的渠道传递给终端用户的过程。在应用程序开发完成后&am…

js轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

OpenCV+QT实现的数字图像处理算法合集

源码下载地址&#xff1a; 基于OpenCV和QT的图像处理源码 图像预处理 灰度处理 灰度直方图 灰度均衡 梯度锐化 Laplace锐化 边缘检测 Roberts Sobel Laplace Prewitt canny Krisch 噪声 椒盐噪声 高斯噪声 滤波 均值滤波 中值滤波 双边滤波 形态学滤波 高斯滤波 图像变…

牛客网刷题-(1)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

工作中几个问题的思考

对于需要并行多公司并行处理的任务&#xff0c;方案是什么&#xff1f; 多线程、并行流、并发库&#xff08;ExecutorService、Futrue、Callable&#xff09;&#xff0c;分布式计算&#xff08;1&#xff09;按照公司ID分片 &#xff08;2&#xff09;按照业务类型分片 处理…

当我让文心一言写个代码来庆祝1024程序员节,它写的代码是……

先让它写个自我介绍吧~ 大家好&#xff0c;我是一个人工智能语言模型&#xff0c;我的中文名是文心一言&#xff0c;英文名是ERNIE Bot。我可以协助您完成范围广泛的任务并提供有关各种主题的信息&#xff0c;比如回答问题&#xff0c;提供定义和解释及建议。如果您有任何问题…

单链表的实现(全注释promax版)

目录 前言&#xff1a; 哨兵位&#xff1a; 链表的概念 链表的相关操作&#xff1a; 链表的创建&#xff1a; 打印链表&#xff1a; 申请新节点&#xff1a; 链表的尾插&#xff1a; &#xff01;&#xff01;&#xff01;对于传参中二级指针的解释&#xff1a; 链表的…

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET “/**“

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET "/**" 问题发现问题解决 问题发现 WebTestClient 是 Spring WebFlux 框架中提供的用于测试 Web 请求的客户端工具。它可以不用启动服务器&#xff0c;模拟发送 HTTP 请求并验证服务器的响…

【UCAS自然语言处理作业一】利用BeautifulSoup爬取中英文数据,计算熵,验证齐夫定律

文章目录 前言中文数据爬取爬取界面爬取代码 数据清洗数据分析实验结果 英文数据爬取爬取界面动态爬取 数据清洗数据分析实验结果 结论 前言 本文分别针对中文&#xff0c;英文语料进行爬虫&#xff0c;并在两种语言上计算其对应的熵&#xff0c;验证齐夫定律github: ShiyuNee…