想必很多面试的人都会被面试官问的关于索引的知识问倒把 ,这也不怪,不是自己动手设计大型的数据库,索引就自然接触的很少,下面简单的列一些索引的知识,大家一起学习把:
以SQL server为例:
索引是一种与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度,索引包含由表或视图中的一列或多列生成的键,这些东西都存储在一个结构(B 树)中。
索引的类型:
聚集
聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
非聚集
非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
索引和约束
对表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE 或 DELETE 语句的各种查询,索引会很有用。
怎样设计索引
- 一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。
- 避免对经常更新的表进行过多的索引,并且索引应保持较窄,就是说,列要尽可能少。
- 使用多个索引可以提高更新少而数据量大的查询的性能。
- 视图包含聚合、表联接或聚合和联接的组合时,视图的索引可以显著地提升性能