昨天南航面试问我索引是啥 作为一个刚开始看SQL的小渣渣脑袋一片空白
今天看了些资料简单梳理一下
1.为什么需要索引?
查询无索引的表,是按照顺序存续的方法扫描每个记录来查找符合条件的记录,因此我们需要索引来加快数据的查询速度与减少系统的响应时间。
数据库索引就是数据库管理系统中一个排序的数据结构,以协助快速查询、更新表的数据,但为表设置索引一方面增加了数据库的存储空间,另一方面在插入修改数据时也要随之改变索引,花费较多的时间。
2.索引类型
聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。聚集索引和表的物理排列顺序是一样的,非聚集索引则不一致。
聚集索引在数据库被开辟一个物理空间存放他的排列的值,所以当插入数据时,他会重新排列整个整个物理空间,而非聚集索引其实可以看作是一个含有聚集索引的表,他只仅包含原表中非聚集索引的列和指向实际物理表的指针。
数据库中的三种索引:唯一索引 主键索引 聚集索引
唯一索引:不允许其中任意两行有相同索引值的索引
主键索引:定义主键时自动创建,唯一标识表中的每一行
聚集索引:行的物理顺序与索引顺序相同,一个表只含有一个聚集索引。
3.建立索引的原则
一般来说,应该在这些列上创建索引:
定义主键和外键的数据列一定要建立索引。
需要经常搜索的列,索引可以加快搜索的速度。
经常需要根据范围进行搜索的列。
经常使用WHERE的列。
不应该建立连接的列:
查询中很少使用或者参考的列
只有很少数据的列
定义为text,image,bit数据类型的列(数据量大或取值少)
修改性能远远大于检索性能的列(修改性能与检索性能相互矛盾)