MySQL索引知识

MySQL索引

笔记部分

查看一张表的索引信息

show keys from $tableName;
show index from $tableName;

索引结构

  • 哈希索引

适合快速查找一个具体的值,但是不适合排序,范围查找。

  • 二叉树索引

适合排序,范围查找。

注意,这里是索引的结构,对应的索引类型可以选择不同的索引结构。

索引类型

  • 主键索引:特殊的唯一索引
  • 唯一索引
  • 全文索引
    • 一些常用的单词或者字母组合不能搜索,具体看官网。
    • 默认不支持中文,但是可以通过安装插件来实现。
    • 如果全文索引中设置了多个字段的话,那么match的时候就需要全部的字段,不能设置单个字段
    • 仅对MyISAM存储引擎生效
select $field from $tableName where match ($field) against ($world);
  • 普通索引
  • 空间索引:很少用,用到的时候再说。

索引使用

  • select时:选择索引外的字段时,索引失效。
  • where时:有索引的字段就行,但是联合索引时(索引不止一个字段,包含多个字段,不是特殊的索引类型),以下情况将失效。
index $field1,$field2,$field3,$field4

搜索时

// 以下搜索时索引生效
$field1
$field1,$field2
$field1,$field2,$field3
// 以下索引将失效
$field2
$field2,$field3
// 简单来说就是一定要讲顺序

一些联合操作也可以使用索引,但是注意顺序,举个例子:

// index:first_name,last_name
select * from users where first_name!='A' and last_name =='B' group by fisrst_name;// 使用索引了
select * from users where first_name!='A' and last_name =='B' group by last_name;// 没有使用索引

索引是first_name,last_name,跟上面的规则一样,first_name,first_name,last_name的顺序是可以的,last_name是不行的。

问题

  • 索引有哪些结构,分别适合什么场景?
  • 索引有哪些类型,主要功能是什么?
  • 索引使用时有什么规则?和一些常见的联合操作group by,min,max等的关系是怎样的?

思考

抛开索引的具体的规则,索引就是目录的功能,比如你的表是users

id first_name last_name
1 A D
2 A D
3 B C

如果你没有为fist_name创建索引,那么当你执行

select * from users where first_name='A';

时,mysql会去遍历表数据,但是当你为first_name创建索引时,会先去查询first_nameA

索引,接着根据索引获取数据,这就是两者的区别。

但是一般1年多的web开发人员由于对索引知识的欠缺,经常建一些缺少索引的表,后期对这些表查询时,可以使用新建索引进行优化。

发布了184 篇原创文章 · 获赞 72 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/YQXLLWY/article/details/87907841