什么是索引
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
如何创建索引
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX <索引名>
ON <表名>(<列名>[ASC|DESC] [, <列名>[ASC|DESC]...])
说明:与表一样,索引也需要有唯一的名字,且基于一个表来建立,可以根据表中的一列或者多列,当列的顺序都是升序默认可不必标出,当属性列有按照降序排列的,所有属性的升序降序都不要标明。
索引的作用
在数据库系统中建立索引主要有以下作用:
(1)快速取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
索引的数据结构有哪些?
B+树,hash map,红黑树
索引的类型
索引一般可以分为四类
- 单列索引:单列索引指的是只包含一列的索引,又可分为三种:
- 普通索引:普通索引是最基本的索引类型。
- 唯一索引:唯一索引列中的值必须是唯一的,允许存在一个空值。多个空值仍然会视为重复
- 主键索引:主键索引是特殊的唯一索引,不允许存在空值。
- 组合索引:组合索引也就是多列索引,由多列组合创建的索引,使用的时候遵循最左前缀原则。
- 全文索引:全文索引只有MyISAM引擎支持,且只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,主要用于做文章的关键字搜索的
- 空间索引:空间索引是对空间数据类型的字段建立的索引
聚集索引和非聚集索引的区别?
聚集索引
也称为聚簇索引,在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引, 即如果存在聚集索引,就不能再指定CLUSTERED 关键字。
索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引更适用于对很少对基表进行增删改操作的情况。
如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,指定了CLUSTERED关键字或干脆没有制定该关键字,SQL Sever将会自动为表生成唯一聚集索引。
非聚集索引
也叫非簇索引,在非聚集索引中,数据库表中记录的物理顺序与索引顺序可以不相同。一个表中只能有一个聚集索引,但表中的每一列都可以有自己的非聚集索引。如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,如果制定CLUSTERED关键字,则将为表产生唯一聚集索引。
索引的数据结构
什么是B+树
B+树是B-树的变体,也是一种多路搜索树:
1.其定义基本与B-树同,除了:
2.非叶子结点的子树指针与关键字个数相同;
3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
(B-树是开区间);
5.为所有叶子结点增加一个链指针;
6.所有关键字都在叶子结点出现;