MySQL高级(索引、索引优化、批量插入数据 showfile、表锁行锁、主从复制)

一、SQL相关

MyISAM和InnoDB

在这里插入图片描述

SQL性能下降的原因

在这里插入图片描述

SQL执行加载顺序

手写:
在这里插入图片描述

机读:

在这里插入图片描述

在这里插入图片描述

7种JOIN

在这里插入图片描述

在这里插入图片描述

二、索引

1、索引是什么

可以得到索引的本质:索引是数据结构。

你可以简单理解为 “排好序的快速查找数据结构” 。
在这里插入图片描述

在这里插入图片描述
结论:

数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

2、索引优势

在这里插入图片描述

3、索引劣势

在这里插入图片描述

4、索引的分类及基本语法

在这里插入图片描述
在这里插入图片描述

5、检索原理

【初始化介绍】
一颗b+树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3, P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。 真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。 非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。
在这里插入图片描述

【查找过程】
如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁 盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存 ,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29.结市香询。点计三次16~~, 真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个 数据项都要发生一次IO,那么总共需要百万次的lO,显然成本非常非常高
在这里插入图片描述

6、需要建立索引的情况

在这里插入图片描述

7、不需要建立索引的情况

在这里插入图片描述

8、Explain关键字介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9、Explain之id(表的读取顺序)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

10、Explain之select_type(数据读取操作的操作类型)、table

在这里插入图片描述
在这里插入图片描述
table
在这里插入图片描述

11、Explain之type

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12、Explain之possible_keys、key

在这里插入图片描述
在这里插入图片描述

13、Explain之key_len

在这里插入图片描述

在这里插入图片描述

14、Explain之 ref 介绍

在这里插入图片描述
在这里插入图片描述

15、Explain之rows介绍

在这里插入图片描述
在这里插入图片描述

16、Explain之Extra介绍

在这里插入图片描述

17、Explain之热身Case

在这里插入图片描述
在这里插入图片描述

三、索引优化

1、索引单表优化案例

建表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、索引两表优化案例

左连接加右索引,右连接加左索引

建表:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、索引三表优化案例

建表:
在这里插入图片描述

左连接,在右边两个表加索引:

在这里插入图片描述
在这里插入图片描述

4、索引优化

在这里插入图片描述
口诀:

  • 1.带头大哥不能死
  • 2.中间兄弟不能断,永远符合最左前缀原则
  • 3.索引列上不计算
  • 4.范围之后全失效
  • 5.百分 like 加右边
  • 6.两边都百分号时 可建 覆盖索引 解决索引失效
  • 7.字符串引号不能缺

建表:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

两边都百分号时 可建 覆盖索引 解决索引失效

在这里插入图片描述
在这里插入图片描述


小总结:

在这里插入图片描述

5、例题分析及建议

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6、小结

口诀:
在这里插入图片描述

一般性建议:
在这里插入图片描述

四、其他优化

1、小表驱动大表

在这里插入图片描述
在这里插入图片描述

2、order by 关键字优化

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


小总结:
在这里插入图片描述

3、group by 关键字优化

在这里插入图片描述

4、慢查询日志

在这里插入图片描述
查看与临时开启
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

永久开启:
在这里插入图片描述

阈值:
在这里插入图片描述
设置慢查询的值:
在这里插入图片描述
在这里插入图片描述
查找慢SQL语句:

在这里插入图片描述
开启慢查询日志后,执行sql后,即可在 /var/lib/mysql 找到日志:
在这里插入图片描述
查看即可发现慢的SQL:
在这里插入图片描述
查看当前系统有多少条慢查询记录:
在这里插入图片描述

若要配置永久生效,则如下:
在这里插入图片描述

使用【mysqldumpslow --help】查看帮助信息:

在这里插入图片描述
帮助信息:

在这里插入图片描述
常用查询:

在这里插入图片描述
在这里插入图片描述

五、批量插入及showfile

1、批量插入数据脚本

在这里插入图片描述

【1 建表】

在这里插入图片描述
在这里插入图片描述
【2 设置参数】

在这里插入图片描述
【3 创建函数,保证每条数据都不同】

随机产生字符串
在这里插入图片描述
在这里插入图片描述
【4 创建存储过程】

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

【5 调用存储过程】

调用部门表的存储过程,插入从 100 开始 的 10条数据:
在这里插入图片描述

在这里插入图片描述

执行员工表的存储过程,添加50万条数据:

在这里插入图片描述
在这里插入图片描述

2、Show Profile

在这里插入图片描述

【第一步 开启功能】
在这里插入图片描述
【第二步 执行SQL】
在这里插入图片描述
【第三步 show profile】
在这里插入图片描述

在这里插入图片描述
【第四步 查看分析】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、表锁行锁

1、读锁案例分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、写锁案例分析

在这里插入图片描述
在这里插入图片描述

3、案例总结

在这里插入图片描述

在这里插入图片描述
表锁分析
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、行锁定案例分析

在这里插入图片描述

5、间隙锁

在这里插入图片描述
在这里插入图片描述

6、如何锁定一行

在这里插入图片描述

7、行锁总结

在这里插入图片描述

8、行锁分析

在这里插入图片描述
在这里插入图片描述


优化建议:
在这里插入图片描述

9、页锁

在这里插入图片描述

七、MySQL主从复制

1、复制的基本原理

在这里插入图片描述
三步骤+原理图:

在这里插入图片描述

2、复制的基本原则

在这里插入图片描述

3、主从复制配置

配置教程:windows为主,linux为从

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值