mysql执行计划语句的分析和理解?

刚学mysq, 被各种key 和 各种index搞混淆了.

  1. 在mysql中, 键key 和 索引index 不应该是两个不同的西吗?
  2. 如下图所示, 为什么explain语句查询结果里的参数key, 被理解成了"索引"?
  3. 怎么去正确的认识键key 和 索引index呢?
  4. 说下自己的个人情况和理解:

    1. 由于自己之前英语专业, 所以对单词key和index很敏感. 所以将它们当成两个不同的东西, 但对于它们的联系认识不足.
    2. 索引是一种Btree 二叉树的逻辑结构, 存储在数据库文件中. 而key是列里面的一组数据.
    3. 看的培训机构的视频, 里面讲师基本概念没讲清楚, 就开始教各种mysql指令了.

图片描述

阅读 2.3k
3 个回答

1.执行计划里的key列,内容就是用到了哪个索引,没有用到索引就是NULL;
2.键有很多种,主键,外键,唯一键,这些都是通过在列上加索引来实现的,例如主键是唯一索引+not null约束,唯一键就是唯一索引,而对于普通列,如果列上有索引,我也把它叫做普通键。可以发现,凡是“键”,都是有索引的,也就是说,每一个索引,其实对应到一个键,所以应该就是这个原因,MySQL在执行计划里把用到索引用"key"来表示。
3.就比如你的例子里,type是ALL,既然ALL是全表扫描,而MySQL是聚簇表,那为什么不说是用到了主键索引呢?因为你没有用到主键来匹配数据,你没有用到键,也就是没有用到索引,所以key是NULL。

百度搜索下相关基础概念吧,创建索引不得指定为哪一个key设置索引吗?这个key就是被设置索引的那个key,当然并不是你设置了索引就一定会被命中,索引命中的条件具体不说了,explain这里的key是你实际命中的索引key

补充回答你修改的问题:mysql使用的是B+tree,付给你一份比较好的介绍mysql索引实现原理的文章http://blog.codinglabs.org/ar...

在MySQL 中, KEY 才是正统的 索引 概念。

  • 添加普通索引
ALTER TABLE `user` ADD KEY idx_name (column_name);
  • 添加唯一索引
ALTER TABLE `user` ADD UNIQUE KEY unq_name (column_name);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题