【MySQL】了解索引的第一步

索引

索引是一种数据结构,构建索引即对已有数据构建数据结构,如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

相关推荐

  1. MySQL了解索引第一

    2024-01-23 10:52:02       33 阅读
  2. 现代 Android 开发第一Kotlin

    2024-01-23 10:52:02       23 阅读
  3. MySQL索引类型

    2024-01-23 10:52:02       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 10:52:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 10:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 10:52:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 10:52:02       20 阅读

热门阅读

  1. IDEA的快捷键

    2024-01-23 10:52:02       35 阅读
  2. 哈希--128. 最长连续序列/medium 理解度C

    2024-01-23 10:52:02       32 阅读
  3. console.log(3 + + “3“) 打印出什么?

    2024-01-23 10:52:02       23 阅读
  4. C# ASP.NET MVC 配置 跨域访问

    2024-01-23 10:52:02       29 阅读
  5. rocketmq双主双从部署+dashbord

    2024-01-23 10:52:02       31 阅读
  6. 风信子(线段树)

    2024-01-23 10:52:02       34 阅读
  7. 【Delphi 基础知识 24】Format函数的用法

    2024-01-23 10:52:02       35 阅读
  8. Linux稀碎知识点 -- 挂载点和分区

    2024-01-23 10:52:02       36 阅读