MySQL(四)——索引的优化

一、索引的执行分析

1.单表查询执行过程以及优化—简单查询

特点:同一个SQL查询过程中,只会命中一个索引
有student表如下:
在这里插入图片描述
表中的数据:
在这里插入图片描述

  • 查询SID=1的学生信息的执行过程:
    在这里插入图片描述
    可以看到:possible_keys: PRIMARY,id ,在SQL执行过程中用主键索引进行查找 key: PRIMARY,在主键索引上一条数据就可以查到结果。
  • 查询name="ZhaoLei"的学生信息的执行过程:
    在这里插入图片描述
    where 后面跟的是 Sname=‘ZhaoLei’ ,分析能够通过索引idx_name辅助索引树找到name=‘ZhaoLei’ 对应的主键,到主键索引上查询主键为1对应的一列数据并返回。
  • 查找Sname=‘ZhaoLei’ 对应的SID
    在这里插入图片描述
    where 后面跟的是 Sname=‘ZhaoLei’ ,分析能够通过索引idx_name辅助索引树找到name=‘ZhaoLei’ 对应的主键,select查询的是SID,在辅助索引上已经满足条件,所以不需要再主键索引上再次查询。
2.单表查询执行过程以及优化—简单查询+排序或分组

创建一个订单表
在这里插入图片描述
插入数据:
在这里插入图片描述
查看表如下:
在这里插入图片描述
从结果可以看出,该表没有添加任何索引

查询userid=1,按照日期升序排序:
在这里插入图片描述

  • 给userid创建索引
    在这里插入图片描述
  • 给date创建索引
    在这里插入图片描述
  • 创建联合索引
    在这里插入图片描述在这里插入图片描述
3.多表查询—连接查询的执行过程及优化

有两个表student和SC
在这里插入图片描述
联表查询分析:
在这里插入图片描述
在使用多表进行连接查询时,MySQL首先会判断哪个表小(表小指的是行数少)
连接查询时,小表总是要整表搜索,建索引是没有用的,大表创建索引可以提高查询效率,小表决定了查询次数,小表决定了查询时间。

在连接查询中,大小表的角色是不一定的,没有where字句,那么就按表的行数来决定,如果有where子句,就按条件过滤完的行数来定大小表!!

二、索引失效

  • like后面的通配符在前面,索引会失效

    select * from student where Sname like 'z%'; //索引有效
    select * from student where Sname like '%z'; //索引失效
    
  • mot in、!=、or、函数、类型转换、未使用联合索引第一列等都无法使用索引

三、SQL和索引的优化

1、慢查询日志

MySQL可以设置慢查询日志,当SQL执行时间超过设定阈值,SQL就会被记录到慢查询当中,通过查看日志,用explain分析SQL执行计划来判定效率低下的原因。

SQL执行超过阈值时间参数可以设置:long_query_time(单位:秒)
查看SQL:show variables like ‘long%’;
慢查询日志存放在MySQL路径下,默认名称是:host_name_show.log

2、查看磁盘I/O读写的数据量
3、show status

MySQL提供show status 命令,查看MySQL运行参数,可以查看select、insert、delete、update语句执行频率,慢查询次数,事务的提交和回滚的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值