Mysql高级 上
一, MySQL的安装
https://www.jianshu.com/p/276d59cbc529
二,MySQL的sql_mode合理设置
用来约束查询有误的SQL语句 虽然说语法没有问题
incompatible with sql_mode=only_full_group_by
ONLY_FULL_GROUP_BY
select 后面的字段只能跟group by 后面的字段与聚 合函数 max,avg
三, MySQL逻辑架构及工作流程(重点)
1.应用程序通过客户端发起请求
2.从数据库连接池里面拿到一个连接
3.访问缓存/写数据到缓冲 如果有缓存 直接拿走
4.缓存没有命中 走SQL查询 走解析器 走优化器
5.从磁盘当中扫描数据 分别返回给缓存和客户端
四, 性能分析工具
1.开启性能分析工具
show variables like '%profiling%';
set profiling=1;
show profiles;
2.开启MySQL的查询缓存
修改配置文件vim /etc/my.cnf
新增一行:query_cache_type=1(开启查询缓存0时表示关闭,1时表示打开)
systemctl restart mysqld
3.想要使用查询缓存 必须SQL语句一模一样
五, 存储引擎MyISAM和InnoDB
1.事务
MyISAM: 不具备事务 提供高速检索速度和查询速度
InnoDB: 具备事务
2.锁
MyISAM: 采用表锁 不适合在高并发的情况下修改数据 降低了读写吞吐量
InnoDB: 采用行锁 适合在高并发修改数据 吞吐量高
3.索引
MyISAM: 只缓存索引 非聚簇索引
InnoDB: 缓存索引与数据 聚簇索引
4.如何选择
MyISAM: 经常查询 没有事务
InnoDB: 频繁修改表 有事务 高并发操作数据库表
https://blog.csdn.net/xlgen157387/article/details/68978320
六,索引
1.概念
可以帮助我们快速找到数据,是一种数据结构
2.优势和劣势
可以提升我们检索数据的效率
降低我们更新表的速度
会占用额外的磁盘空间
3.平衡二叉树
任何节点的两个子树的高度最大差为1
4.B-Tree和B+Tree的区别(重点)
a.B+Tree数据结构
存放主键
存放子节点地址
叶子节点只存储主键与数据
b.优点
由于非叶子节点没有存放数据 每个磁盘块可以存放更多的索引节点
B+Tree树的深度比B-Tree更低 意味着访问磁盘的次数少 性能更高
5.聚簇索引与非聚簇索引
a.聚簇索引
如果节点中包含数据
b.非聚簇索引
如果节点中不包含数据
6.哪些情况需要创建索引←
主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
两个表之间存在外键关联,那这个外键也应该建立索引
单键索引与组合索引相对比,组合索引性价比更高
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段
7.哪些情况不要创建索引←
表记录太少
经常增删改的表或者字段
Where条件里用不到的字段不创建索引
过滤性不好的不适合建索引
性别 就男 女 未知
预热
- 求各个门派对应的掌门人名称:
在这里插入代码片
2.求所有当上掌门人的平均年龄:
在这里插入代码片
3.求所有人物对应的掌门名称
在这里插入代码片
作业
1、列出自己的掌门比自己年龄小的人员