哈希空间
MySQL数据库
MySQL教程
MySQL经验
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 阅读 895