MySQL高级

SQL性能下降原因

在这里插入图片描述
建索引(单值,复合)
查询更快:select * from user where name=’’ and email=’’;

单值
create index idx_user_name on user(name)
复合
create index idx_user_nameEmail on user(name,email)

七种JOIN理论

在这里插入图片描述
在这里插入图片描述
MySQL实现全连接

select * from tb1 a left join tb2 b on a.id=b.id
union
select * from tb1 a right join tb2 on a.id=b.id;7select * from tb1 a left join tb2 b on a.id=b.id where b.id is null
union
select * from tb1 a right join tb2 on a.id=b.id where a.id is null;

索引

本质:索引是数据结构,可以理解为排好序的快速查找数据结构
索引会影响到where后的查找和order by后的排序
在这里插入图片描述
删除其实只是逻辑上删除,给其一个标志位,物理上还是连续的,底层其实是update
索引往往以索引文件的形式存储在磁盘上
在这里插入图片描述
优势:

  • 提高数据检索效率,降低数据库的IO成本
  • 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势:
-
索引分类

  • 单值索引:一个索引只包含单个列,一个表可以有多个单值索引
  • 唯一索引:索引列的值必须唯一,但允许有空值
  • 复合索引:一个索引包含了多个列
  • 基本语法:
    在这里插入图片描述
    唯一索引加上UNIQUE
    在这里插入图片描述
    索引结构
  • BTree
  • Hash
  • full-text全文
  • R-Tree

哪些情况需要建索引
在这里插入图片描述
复合索引,查询最好按照索引顺序,比如索引是name,age,email那么查询顺序最好为name,age,email

哪些不要建
在这里插入图片描述
经常增删改的表:
在这里插入图片描述

索引优化分析

在这里插入图片描述
EXPLAIN
作用:
在这里插入图片描述
语法:explain + sql
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • id:在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    t3最先被执行,t2最后被执行
    在这里插入图片描述
    t3最先执行,衍生表是s1,其中derived2中的2表示id=2,id=2的表衍生出来的表
  • select_type:
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • table:显示这一行的数据是关于哪张表的
  • type:在这里插入图片描述
    all表示全表扫描,百万级以上数据一定要优化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    const和system
    在这里插入图片描述
    eq_ref和ref
    eq_ref表示查询结果中只有一个结果(主键和唯一键的情况下,非key显示ref)
    在这里插入图片描述
    ref表示查询结果有多个也可以为一个(非主键和唯一键的情况下)
    在这里插入图片描述
    range(此处age和stu都为索引)
    在这里插入图片描述
    index(此处select返回的id是索引)
    在这里插入图片描述
  • possible_key:在这里插入图片描述
  • key:在这里插入图片描述
    在这里插入图片描述
    覆盖索引:select后查询的和索引顺序个数一致
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • key_len:在这里插入图片描述
  • ref:在这里插入图片描述
    在这里插入图片描述
    test库的t1表的id字段
  • rows:在这里插入图片描述
  • Extra:包含不适合在其他列中显示但十分重要的额外信息
    在这里插入图片描述
    在这里插入图片描述
    Using filesort
    在这里插入图片描述
    排序也要按索引顺序和个数
    Using temporary
    在这里插入图片描述
    分组也要按索引顺序和个数

重点id、type、key、rows和Extra
在这里插入图片描述
在这里插入图片描述

索引单表优化案例

查询category_id为1且comments大于1的情况下,views最多的article_id
在这里插入图片描述
type为all并且extra出现filesort,必须优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不用带范围的做索引
在这里插入图片描述
在这里插入图片描述

两表优化

在这里插入图片描述
左连接给右表加索引
在这里插入图片描述

三表优化

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

索引优化

索引失效
在这里插入图片描述
1.全值匹配:索引是什么数量什么顺序,查询就按什么数量什么顺序
在这里插入图片描述
2.最佳左前缀法则:要想火车跑得快,全靠车头带,中间车厢不能断
在这里插入图片描述
3.不要操作索引列在这里插入图片描述
4.用不到索引中范围条件右边的列:in,like,>,<
在这里插入图片描述
在这里插入图片描述
5.尽量用覆盖索引
在这里插入图片描述
6.使用不等于(!=,<>)时无法使用索引会导致全表扫描(x):新版本优化了?
在这里插入图片描述
7.is null和is not null不能用索引
在这里插入图片描述
8.用like语句通配符不能开头:like%加右边
在这里插入图片描述
对于like两边有百分号的情况,推荐用覆盖索引解决
在这里插入图片描述
9.字符串不加单引号会索引失效:不要在索引上类型转换
在这里插入图片描述
10.少用or,用or连接也会导致索引失效:新版本优化了?
在这里插入图片描述
总结
在这里插入图片描述
在这里插入图片描述

索引案例

都是常量所以顺序无所谓比如1+2+3=2+3+1=6,但是最好还是按索引写
在这里插入图片描述
不是常量顺序也没关系,优化器自己会优化,范围之后全失效,c3是倒数第二个,所以c4失效了;c4是最后一个索引,所以还是用了四个索引。
在这里插入图片描述
c3严格说也用到了,他作用是排序不是查找,和c4就完全没关系了
在这里插入图片描述
order by不按索引顺序,会产生filesort
在这里插入图片描述
只有c1一个字段索引,但是c2,c3用于排序,没有filesort
在这里插入图片描述
order by不按索引顺序,会产生filesort
在这里插入图片描述
c2此时已经是常量了,所以排序无所谓,直接找到const上c3
在这里插入图片描述
分组之前必排序,所以group by和order by几乎一致
在这里插入图片描述
在这里插入图片描述

一般性建议

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

查询截取分析

优化流程
在这里插入图片描述
优化原则:小表驱动大表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

order by优化

在这里插入图片描述
order by默认升序同时desc或者asc可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结
在这里插入图片描述
对于排序来说,多个相等条件也是范围查询

group by优化

在这里插入图片描述

慢查询日志

在这里插入图片描述
默认情况下MySQL不开启这个功能,如果不是调优需要建议关闭,因为会降低点性能
查询是否开启:show variables like ‘%slow_query_log%’;
开启:set global slow_query_log=1;
在这里插入图片描述
开启后只对当前数据库生效,重启后失效

什么样的SQL会被存入慢查询日志?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日志分析工具mysqldumpshow

在这里插入图片描述
常用操作
在这里插入图片描述

批量插入数据脚本

在这里插入图片描述
在这里插入图片描述
创建随机函数
在这里插入图片描述
创建插入存储过程(自动提交设为0,全部插入后提交
在这里插入图片描述

用Show Profile进行SQL分析

在这里插入图片描述
分析步骤
在这里插入图片描述
2.
在这里插入图片描述
4.duration是用时
在这里插入图片描述
5.
在这里插入图片描述
参数列表
在这里插入图片描述
6.结论
在这里插入图片描述

全局查询日志

永远不要在生产环境开启这个功能,测试可以
在这里插入图片描述

锁理论

在这里插入图片描述
从对数据操作类型来分(读/写):
在这里插入图片描述
对数据操作粒度分:表锁(偏读)、行锁(偏写)

增加锁
lock table 表名 read/write, 表名2 read/write;
查看表加的锁
show open tables;
解锁
unlock tables;

在这里插入图片描述
在这里插入图片描述
表锁(以下为MyISAM引擎)
读锁
在这里插入图片描述
在这里插入图片描述
写锁
在这里插入图片描述
总结
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
行锁(innodb引擎,默认自动提交)
就类似隔离级别

索引失效行锁变表锁

在这里插入图片描述

间隙锁的危害

在这里插入图片描述
在这里插入图片描述
什么是间隙锁
在这里插入图片描述

如何锁定某一行

在这里插入图片描述
锁了后别的会话一直等待
在这里插入图片描述

行锁总结

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

优化建议

在这里插入图片描述

主从复制

三步骤和原理:slave会从master读取binlog进行数据同步
在这里插入图片描述
基本原则
在这里插入图片描述
一主一从配置
参考:主从复制
注意:要关闭防火墙

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值