遥远的将不再遥远,平凡的已不再平凡。
索引是一种排好序的快速查找的数据结构,它帮助数据库高效的进行数据的检索。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(额外的存储空间),这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高效的查找算法。这种数据结构就叫做索引。
一般来说索引本身也很大,不可能全部存储在内存中,因此往往以索引文件的形式存放在磁盘中。目前大多数索引都采用BTree树方式构建。
单值索引:一个索引只包括一个列,一个表可以有多个列
唯一索引:索引列的值必须唯一,但允许有空值;主键会自动创建唯一索引
复合索引:一个索引同时包括多列
show index from user;
create index 索引名字 on 表名(字段名); #创建索引
create index score_index on scores(score); #创建索引
alter table user add index sex_index(sex)
alter table students add unique(id) #创建唯一索引,索引列的值必须唯一
alter table user add index cp_index(name,age);
alter table user add unique cp_index(name,age);
alter table uesr drop index cp_index;
type:
explain
select * from user where id = 1;#使用了id的索引
当我们创建一个联合索引(复合索引)的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则,也称为最左特性。
注意:查询k2字段或者k3字段或者k2和k3字段,索引就会失效
ALTER TABLE user ADD INDEX user_index(id,name,age); #这里添加复合索引
explain
select * from user where id = 1 and name = "阿柒"; #索引生效
select * from user where name = "阿柒"; #索引失效
select * from user where id = 1 and age = 21; #索引失效
明显查询索引表比直接查询数据表要快的多,首先,索引表是排序了,可以类似二分查找,非常有效的提高了查询的速度。
其过程如下图,先到事先排序好的索引表中检索查询,找到其主键后,就直接定位到记录所在位置,然后直接返回这条数据。
优点:
缺点:
原文:https://www.cnblogs.com/fangweicheng666/p/15158592.html