慢查询日志
Mysql日志类型
慢查询日志的定义:
如何开启慢查询日志?可以通过命令也可以修改配置文件永久设置。
查看慢查询日志的一些参数
使用set global slow_query_log=ON开启慢查询日志
查看一些参数
Explain查询分析器
显示来自优化器的有关于语句执行计划的信息
使用实例
各个参数:
type:连接类型,如system、const、eq_ref、range、index、all等
key:实际使用的索引,NULL表示没使用索引
rows:扫描的行数
filtered:选取的行数占扫描行数的百分比
索引的基本使用
什么是索引?类似图书的目录!
常见的索引类型
索引的使用
注意:
①选择区分度高的列建立索引:
区分度计算:count(distinct col)/count(*)
它表示字段不重复的比例
②每次查询每张表仅能使用一个索引
③避免对索引列进行计算
索引的基本使用举例
查看某张表的索引信息: 目前主键默认为一个索引
对本张表进行一个查询解释,key为NULL表示没有使用索引
对name列建立一个索引idx_name,使用explain查询解释,key为idx_name
删除这个表的索引
接下来,有一个一百万条记录的表,对他进行查询。发现要4秒多
使用语句建立一个索引,建立索引也很慢
之后进行查询,发现很快。
使用like之后也没有用到索引,查询很慢
复合索引的前导列特性
实例:目前这个表只有一个id索引
创建一个复合索引
使用explain语句进行查询解释:只使用了name索引
explain语句进行查询解释:也是只使用了name索引
explain语句进行解释查询:复合前导列特性,没有使用dept索引
覆盖索引
什么是覆盖索引?
索引覆盖:即select的数据列只从索引中就得到,不必读取数据行,也就是只需要扫描索引就可以得到查询结果
第四点:哈希索引、空间索引等,全文索引存的是某张文章中的某个词可能,但你要看这篇文章,从覆盖索引中是拿不到的。
如何判断使用了覆盖索引?
上节课我们队employee表建立了三个索引,之前=还有一个主键索引,总共有四个索引 (primary)以及由idx_name_salary_dept产生的三个前导列索引
explain进行解释查询,extra为NULL说明还是从表中读取的数据
explain进行解释查询,extra不为NULL说明是直接从索引中读出来的数据