冲刺学习-MySQL-常见问题

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.mzph.cn/news/117132.shtml

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

相关文章

计算机考研自命题(5)

1、C语言–求和 1、展开式求和。输入一个实数x&#xff0c;计算并输出下式的和&#xff0c;直到最后一项的绝对值小于0.00001.计算结果保留2位小数&#xff0c;试编程。 S x x/2&#xff01; x/3&#xff01; … /* 算法思想&#xff1a;定义一个求阶乘的函数fact(), 头文件调…

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

基于SpringBoot的时间管理系统

基于SpringBoot的时间管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 用户界面 摘要 基于Spring Boot的时间管理系统是一款功能丰富…

Unity之ShaderGraph如何实现靠近显示溶解效果

前言 今天我们来实现一个我再B站看到的一个使用LeapMotion实现的用手部触摸就可以显示的溶解效果。 效果如下图所示: 主要节点 Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 …

ArcGIS笔记10_如何创建渔网?

本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具&#xff0c;它可以创建出规规整整的小格子&#xff0c;每个小格子都对应一个标注点&#xff0c;可以将原本散乱的数据规整化&#xff0c;如下图&#xff1a; Ste…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Nginx 防盗链

nginx防盗链问题 盗链&#xff1a; 就是a网站有一张照片&#xff0c;b网站引用了a网站的照片 。 防盗链&#xff1a; a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户&#xff1f; HTTP Referer…

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat&#xff08;通常简称 Tomcat&#xff09;是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。它是Apache软件基金会的一部分&#xff0c;提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages&#xff08;JSP&#xff09;。本篇博客将…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件&#xff1a; zabbix server zabbix agent server 用来部署 web console以及相关的数据存储&#xff0c;所以需要配合一些数据库来保存数据&#xff0c;比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化&#xff0c;自动适配文字大小&#xff0c;TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView &#xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

【proteus】8086 写一个汇编程序并调试

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;p103-105&#xff0c;p119-122. 参考程序是p70&#xff0c;例4-1 在上一篇的基础上&#xff1a; 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图&#xff1a; …

ant design vue Message 用法以及内容为 html片段情况

ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失&#xff0c;是一种不打断用户操作的轻量级提示方式。 全局配置&#xff1a; // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

【数据结构】常见复杂度习题详解 ------ 习题篇

文章目录 &#x1f4cb;前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 &#x1f4cb;前言 …

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

★多模态大模型&#xff1b;GPU算力&#xff1b;LLMS&#xff1b;LLM&#xff1b;LMM&#xff1b;GPT-4V&#xff1b;GH200&#xff1b;图像识别&#xff1b;目标定位&#xff1b;图像描述&#xff1b;视觉问答&#xff1b;视觉对话&#xff1b;英伟达&#xff1b;Nvidia&#…

交换机控制在同一个网段内的终端,用hybrid接口实现不同的IP通和不通。

实验效果&#xff1a;pc1和pc2不能通&#xff0c;但pc1和pc2分别可以和pc3通。 通过这个实验可以彻底掌握数据包在交换机上的进去的类型状态。 sw1配置&#xff1a; [sw1]dis current-configuration sysname sw1 vlan batch 10 20 100 interface GigabitEthernet0/0/1 port h…