哈希空间

mysql索引

目录

mysql索引是什么

索引是为了提高SQL运行效率而提供的一种手段。当对某个字段设置索引优化后,一些情况下使用 where 查询该字段时可以非常快速的返回这些满足条件的记录。

比如在 学生信息表中有100条记录,我们现在要查询姓名为 Jack 的学生记录

select * from student where name='Jack'

理论上,我们需要扫描全部100条记录,依次比较 name 字段是否 Jack 。当我们给 name 字段设置索引后,通常仅需扫描几条记录就可以找到全部 name 为 Jack 的记录,极大的提高了SQL 的执行速度和效率。对于网站等服务是不是 卡 、慢 通常有非常明显的作用。

索引类型

分为 INDEX 普通索引,UNIQUE 唯一索引,PRIMARY KEY 主键索引。
主键索引只能设置一个,INDEX/UNIQUE 可以设置多个。

可以对一个字段设置索引,也可以多个字段设置 联合索引

创建索引 ALTER TABLE ADD INDEX

语法

ALTER TABLE 表名字 ADD INDEX 索引名字(表字段)

例子给 学生信息报 studet 表中的name 字段设置索引

ALTER TABLE student ADD INDEX index_name (name)

创建唯一索引 ALTER TABLE ADD UNIQUE

例子:因为手机号不应该有重复的,所以给学生信息 studet 表中的 mobile 字段设置唯一索引

ALTER TABLE student ADD UNIQUE mobile (mobile)

这里我们将索引名定为和字段名一样的 mobile ,可以根据需要设置,也可以不同。

删除索引 DROP INDEX

例子,删除 学生信息表中的mobile 索引

ALTER TABLE student DROP INDEX mobile;

注意无论是普通索引还是唯一索引都使用 DROP INDEX 来删除。

查看索引

show index from student;

就可以方便的查看表中索引情况,下面是对结果中一些字段的说明:

  • Table 表的名称
  • Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1
  • Key_name 索引的名称
  • Seq_in_index 索引中的列序列号,从1开始
  • Column_name 列名称
  • Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)
  • Null如果列含有NULL,则含有YES。如果没有,则该列含有NO
  • Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)

索引失效的情况

对索引列进行函数运算,则索引会失效,无法加速查询。

比如:

select * from length(name)=3

name 即使有索引,也无法使用到,这个操作会到全表扫描找出符合条件的所有记录。

联合索引,没有前缀匹配查询

查看 联合索引 中的说明

本文 最佳观看地址:https://www.hashspace.cn/mysql-suoyin.html 阅读 511

打开 哈希空间 微信小程序中查看更佳