【MySQL】了解索引的第一步

发布时间:2024年01月22日

索引

索引是一种数据结构,构建索引即对已有数据构建数据结构,如B+树。

给表中已有字段增加索引
alter table tableName add index indexName(col1,col2);
alter table tableName add  primary key (id)// 增加主键索引,主键索引只能有一个,且该列内容不能重复、不能为null值;
alter table tableName drop primary key
alter table tableName add unique indexName(col1);

分析索引使用explain字段:

id: 从大到小,从上到下
select_type: primary(最外层的查询) derived(联表临时表) simple(单表)
table: 使用的表
type:  system > const > eq_ref > ref > range > index > all

	system: 表中只有一条数据. 这个类型是特殊的 const 类型.
	const:针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可
	eq_ref: 此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 =, 查询效率较高.
	ref: 此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀 规则索引的查询.
	range: 表示使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中
	index: 表示全索引扫描(full index scan), 和 ALL 类型类似, 只不过 ALL 类型是全表扫描, 而 index 类型则仅仅扫描所有的索引, 而不扫描数据;从索引中就能拿到数据
	ALL: 表示全表扫描, 这个类型的查询是性能最差的查询之一.
	
possible_key:  可能用到的索引
key:  用到的索引
key_len:  用到的索引长度
ref:  索引中的哪一列呗使用
rows: 扫描过的行数
filtered: 符合查询条件的数据比例
extra:  using file_sort(将数据加载到内存,小于阈值则在内存中快排,大于阈值则使用归并排序)、using index、using temporary

索引失效

  1. 不符合最左前缀
  2. 使用函数计算
  3. 范围查询的后面字段索引失效
  4. like “%name”
  5. is not null和不等于号
  6. order by出现又倒序又顺序
  • order by 和 group by中使用同样需要保留最左匹配

查看慢查询日志,设置慢查询阈值

// 查询慢查询日志是否开启,慢查询日志的位置
show global variables like '%slow_query_log%';
// 查询慢查询时间
show global variables like '%long_query_time%';
// 设置慢查询阈值
set long_query_time=5;
  • 参考文献
    https://segmentfault.com/a/1190000008131735#item-3-3
文章来源:https://blog.csdn.net/xjw9602/article/details/135758391
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。