MySQL Innodb覆盖索引和主键索引以及唯一索引浅析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39082172/article/details/102722589
  • 主键索引

主键索引就是聚簇索引,每张表有且只能有一个主键,可以由一个或多个字段组成。
主键索引的三个条件:1.主键键值必须是唯一2.不能含有null值3.保证主键是自增的
自增列作主键可以使写入的顺序也是自增的,这个可以提高存储效率
语法:

alter table table_name add primary key(column_name);

多个字段组成主键

alter table table_name add primary key(column_name1,column_name2);
  • 唯一索引

唯一索引是约束(约束是指字段不能为null值,不能重复等)条件的一种,不能有重复的值,但可以有null值,表中只能有一个主键,但可以有多个唯一索引。
语法:

alter table table_name add unique (column_name);
  • 覆盖索引

覆盖索引是指同过通过索引文件就可以返回查询所需要的数据,不必通过回表操作得到数据,即查询列要被所使用的索引覆盖。建立索引的字段正好是覆盖查询语句中所涉及的字段,也即,索引包含了查询正在查找的所有数据.减少大量的I/O操作,提升查询效率

eg:表A 有主键id,字段name 要通过name 查询id

select id from A where name='张三' ; 

已知普通索引是(主键—索引字段)这样的存储方式,通过主键查找普通索引字段行数据逆向的想一下, 我们把name 改为普通索引,这样name字段就带上主键id,通过name检索时可以直接得到主键id。这样就直接可以从索引文件得到查询的数据。这就是覆盖索引。同理多个字段查询也可设置成联合索引。

注:一定要让select列出所需要的列,不能出现select * 这样的操作,否是索引失效。

猜你喜欢

转载自blog.csdn.net/qq_39082172/article/details/102722589