当前位置:首页 > 文章列表 > 数据库 > MySQL > mysql高级部分

mysql高级部分

来源:SegmentFault 2023-02-24 21:59:28 0浏览 收藏

哈喽!今天心血来潮给大家带来了《mysql高级部分》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到MySQL,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你!

mysql逻辑架构

图片描述

连接层

最上层是一些客户端和连接服务,包含本地scoket同学和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似连接处理,授权认证,及相关的安全方案,在该层引入线程池的概念,为通过认证安全接入的客户端提供线程,同样在该层上可以实现基于SSL的安全链接,服务器也会为安全接入的每个客户端验证它所具备的操作权限。

服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存查询,SQL的分析和优化及部分内置函数的执行,所有跨存储引擎的功能也在这一层实现,如过程,函数等,在该层,服务层会解析查询并创建相应的内部解析树,并对其完成响应的优化确认查询表的顺序,是否利用索引等,最后生成相应的执行操作,如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样就解决大量读操作的环境中能够很好的提供系统性能。

存储引擎层

存储引擎层,存储引擎真正负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取,例如:MYISAM和InnoDB。

数据存储层

主要将数据存储在运行于裸设备的文件系统之上,并完成存储引擎的交互(文件系统)。

MyISAM和InnoDB对比

功能点 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,操作一条记录也会锁住整个表,不支持高并发 行锁,操作一条记录只会锁住一行,适合高并发
缓存 只缓存索引,不缓存数据 缓存索引也缓存数据,对内存要求高,内存大小直接影响性能
表空间
关注点 性能 事务
默认安装

sql慢的原因

  1. 查询语句效率低
  2. 索引失效或者没建索引
  3. join太多
  4. 服务器参数设置

索引

什么是索引

索引是一种数据结构,提高查询的效率
索引会将数据排序,从而能够快速查找
数据库除了有数据以外,还维护着一个满足特定查找算法的数据结构,这种数据结构以某种方式指向数据,这样就可以利用这种数据结构高效地查找数据,这种数据结构就是索引。

索引的优点

  1. 提高查询效率,降低IO成本
  2. 对列进行排序,降低排序成本

索引的缺点

  1. 索引也是一张表,保存了键值对,并指向实际数据,索引列也需要占用空间。
  2. 虽然索引能够提升查询的效率,但是会降低更新的效率,比如insert,update,delete,因为更新表时,mysql不仅要保存新的数据,还要更新索引列的信息。

索引分类

  1. 单值索引
  2. 唯一索引
  3. 复合索引

哪些情况可以建索引

  1. 主键自动建立唯一索引
  2. 频繁作为查询条件的字段要建立索引
  3. 与其他表关联的字段,外键字段建立索引
  4. 查询中的排序字段
  5. 查询中统计或分组的字段

哪些情况不要建索引

  1. 表数据很少(300万一下的)
  2. 经常增删改的字段
  3. 数据重复且平均的字段,这种字段建索引没有意义

explain

explain可以模拟优化器执行sql语句,从而可以了解sql语句执行的内部原理,以此来分析性能瓶颈。

使用方法

mysql> explain sql_sentence;

作用

  1. 表的读取顺序
  2. 数据库读取的操作类型
  3. 哪些索引可以被使用
  4. 哪些索引实际被使用
  5. 表之间的引用
  6. 每张表有多少行被优化器查询

输出信息

id

表的读取顺序
  1. id相同:自上而下执行语句
  2. id不同:id越大,优先级越高,越先执行
  3. id有相同的也有不同的:先执行id最大的第一个,然后平级的顺序执行,再执行小一级id的语句

select_type

查询的类型
  1. simple:简单的select查询,查询中不含子查询或union
  2. primary:查询中包含任何复杂的子查询,则最外层的查询是此类型
  3. subquery:查询中包含子查询
  4. derived:临时衍生表
  5. union:第二个select出现在union之后
  6. union result:union之后的结果

table

数据对应的表

type

显示查询使用了哪种类型
  1. system:表中只有一行数据,是const类型的特例
  2. const:通过索引一次就找到了,通过主键或唯一索引与常量值比较只匹配一行数据,用于单表查询
  3. eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,用于多表联查
  4. ref:非唯一索引扫描,返回所有匹配的行
  5. range:检索给定范围的行,比如where中的in、between、>、
  6. index:只遍历索引树,用于获取表的所有索引字段的数据,select id from table;
  7. all:全表扫描,从磁盘中读取数据,百万级数据查询出现all则需要优化

possible_key

显示可能用到的索引值,但不一定会被实际用到

key

实际使用到的索引,如果为空则没有使用或者根本没有索引

key_len

索引中使用的字节数,长度越短越好
它表示索引字段的最大可能长度,而不是实际长度

ref

显示那一列索引被用到了,可能是const或者某一列

rows

大致估算找到所需信息需要读取的行数

extra

额外信息
  1. using filesort:mysql对数据进行重新的排序,无法利用索引进行的排序叫文件排序
  2. using temporary:排序时创建了临时表
  3. using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据,如果出现了using where表示索引列被用来查找特定行,如果没出现则说明索引列只用来提取数据

索引优化

防止索引失效

  1. 最佳左前缀法则:如果索引了多个列,查询需要从索引的最前列开始,且不能跳过索引中的列
  2. 不要在索引列上做任何操作,比如各种函数操作,不然会导致索引失效并转向全表扫描
  3. 在where中使用了范围,则范围右边的列失效
  4. 尽量使用覆盖索引(索引列和查询列顺序一致),少用select *
  5. 在使用不等于(!=或者)时,无法使用索引,使用的是全表扫描
  6. is null和is not null无法使用索引
  7. like以通配符开头的(like '%xyz'),索引会失效,变成全表扫描
  8. 隐式类型转换会导致索引失效
  9. 少用or

慢查询

在/var/lib/mysql有log文件
使用mysqldumpslow查看日志

好了,本文到此结束,带大家了解了《mysql高级部分》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
PHP+AJAX实现账号注册和登陆,附可用demoPHP+AJAX实现账号注册和登陆,附可用demo
上一篇
PHP+AJAX实现账号注册和登陆,附可用demo
MySQL 一对多查询
下一篇
MySQL 一对多查询
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    15次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    24次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    42次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码