MySQL 进阶篇1.0 索引 SQL优化 视图 锁
01-课程介绍

02-存储引擎-MySQL体系结构


03存储引擎-简介
查询建表语句 --默认存储引擎:InnoDB
show create table account;
查询当前数据库支持的存储引擎
show engines;


04存储引擎-InnoDB介绍


开关为"ON": 表示每个innodb引擎的表都有一个idb表共享文件

05存储引擎-MyISAM和Memory



面试常考(InnoDB与MyISAM区别)
06存储引擎的选择(一般就是InnoDB,其他两个在其他SQL中都有优化版)


08MySQL安装(linux)&遇到的问题

输入password的时候 不显示输入 我还以为没输入进去真贱啊


没开Linux防火墙3306的端口 不能远程链接
linux怎么允许3306端口通过防火墙,Centos7允许3306端口通过防火墙_倪振源的博客-CSDN博客
cnm,nmsl,教的什么j8玩意,链接虚拟机地址都不让我们查一下? 老子查了两个点才查出来!!!!
【MySQL】DataGrip连接linux中的MySQL_猫打球商店的博客-CSDN博客_datagrip 连接linux服务器
mariadb-libs 被 mysql-community-libs-compat-8.0.26-1.el7.x86_64 取代_别晃我的可乐的博客-CSDN博客_mariadb-libs
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
直接停止再重启mysql服务
09索引-概述



10索引-结构-介绍


11索引-结构-Btree

红黑树和二叉树都存在问题:大数据量情况,层级较深,检索速度慢;

最大度数:n 每个节点最多存储n-1个key,n个指针;分裂的时候中间向上左右

继续插入元素,


数据结构可视化网站 ↑
12索引-结构-B+tree


非叶子节点的数据作为索引

13索引-结构-hash
先计算每一行的hash值,然后计算name的hash值映射到蓝色hash槽位里面,然后存储(name,name对应的行的hash值)到hash表;

14索引-结构-思考题(why InnoDB引擎用 B+tree?)
B-树就是B树;

B+树的双向链表便于范围搜索和排序;不用hash因为只支持对等比较,不能范围且无序
15索引-分类聚集索引&二级索引

可以这样理解,可以通过聚簇索引(一般都是主键索引)直接查到数据,如果通过二级索引,则需要通过二级索引定位数据对应的主键索引(聚簇索引),再通过主键索引(聚簇索引)找到数据,因为聚簇索引的叶子节点有数据
聚集索引之所以必须有是因为他是用来存储数据的,而二级索引更多的使用来更快更高效的查询数据



*16索引-思考题

n=key数量;8=主键占用的字节数;n+1 指针;6指针字节;一页16kb;
而每一个页有16k,一行数据假设为1k,就是每页可以存储16行。切记,只有叶子节点才是存放数据,非叶子节点是存储的索引
两千多万数据也才3层;
17索引-语法


1. create index idx_user_name on tb_user(name);
2. create index idx_user_name on tb_user(name);
3. create index idx_user_pro_age_sta on tb_user(profession,age,status);
4. create index idx_user_email on tb_user(email);
18索引-性能分析-查看执行频次
Com七个_; _代表字符占位符
因为7个下划线正好和_select,_update,_insert和_delete的拼写长度一样
代表当前数据库增删改查的次数

19索引-性能分析-慢查询日志



20索引-性能分析-show profiles





21索引-性能分析-explain 执行计划


连接类型type
NULL:查询不妨问任何表时出现NULL, 如:select 'A',业务系统的sql一般不可能优化到NULL; system:访问系统表 const:根据主键/唯一索引访问; ref:使用非唯一索引查询
eq_ref 在主键索引或者唯一性索引用于做被驱动表的连接字段时就会出现
index:使用了索引,但会扫描遍历整个索引树 all:全表扫描


22索引-使用规则-验证索引效率




23索引-使用规则-最左前缀法则


24索引-使用规则-索引失效情况一



25索引-使用规则-索引失效情况二

先看or后面的,后面没有那都没有,后面有在看前面的;必须两个都有才用索引;
道理很简单,你要在一堆东西中找两个东西,一个能够立即找到,但是另外一个必须在所有东西中找;

26索引-使用规则-SQL提示
(use只是一种建议 mysql是否接受不一定要看效率) use/ignore/force 建议/不用/强制使用

27索引-使用规则-覆盖索引&回表查询



面试题:最佳方案:针对username-password建立联合索引 因为联合索引是二级索引,B+树叶子下面挂的是ID(主键),所以执行select不需要回表查询 性能最好
28索引-使用规则-前缀索引




29使用规则-单列&联合索引


创建索引(phone,name) 先 按phone排列 后按name;
要满足最左前缀法则;所以要考虑参数顺序 单列索引容易回表查询,性能降低
30索引-设计原则

31索引-小结
32SQL优化-插入数据


33SQL优化-主键优化(每页包含2~n)


编辑
编辑


编辑
编辑
编辑


编辑


编辑
34SQL优化-order by优化

编辑


编辑


编辑
35SQL优化-group by优化


编辑
36SQL优化-limit优化

编辑
37SQL优化-count优化(由存储引擎决定)
编辑

编辑
编辑
38SQL优化-update优化(避免行锁升级为表锁)


编辑
39SQL优化-小结


编辑
40视图-介绍及基本语法

编辑


编辑
41视图-检查选项(cascaded) (译为:级联的)


编辑with cascaded check option;
视图 会在操作的时候检查是否满足where条件
并递归继续检查上面(依赖)的v2带cascaded的where 直到每个底层带cascaded的 都满足 才执行SQL;
42.进阶-视图-检查选项(local)


编辑
区别在于:local 当前v3没有检查选项 就不用管其它带(local的)依赖视图;
但是cascaded 就算v3没有也要管v2,v1(带cascaded检查选项的).
43.进阶-视图-更新及作用

编辑

编辑
44.进阶-视图-案例


编辑
本文来自博客园,作者:软工菜鸡,转载请注明原文链接:https://www.cnblogs.com/SElearner/p/17676661.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)