什么是索引?它可以做什么用?
如果不在数据库中建立索引,那么执行一条select语句就会进行全表扫描,也就是一条一条的找。
打个比方:如果没有目录,查汉语字典就要一页页的翻,而有了目录只要查询目录即可。为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录。
怎么创建索引?
一个表中有一个到多个字段,我们使用索引查找一条记录的时候,也能是以一个字段为准
创建索引的方式,在表设计器中点击右键,选择“索引/键”→添加→在列中选择索引包含的列。
引入一个概念:索引树
以查找汉语词典中的一个字为例子:假设我们使用的是拼音检索的方式,查“猪”这个字,它的拼音是”zhu”先找的是z,然后是h再是u,找z的时候是从a-z这26个字母中找到的,找h的时候,也是从一系列的字母中找到的,u同样也是的,这样下来,就是一棵树。
索引的坏处
使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据的时候也需要同步更新索引,因此会降低Insert、Update、Delete的速度。只在经常检索的字段上(Where)创建索引。
有了索引,有时也会进行全表扫描
即使创建了索引,仍然有可能全表扫描,比如like、函数、类型转换等。
聚集索引与非聚集索引
聚集索引:在物理位置上,是放在一起的,比如说拼音检索,词典中的汉字就是按从a到z的顺序放的。
非聚集索引:就像是偏旁检索方式。
填充因子
因为针对一个列的索引可能有很多,比如a-z,那么这些索引在一个页面中是放不完的,于是分开几个页面来放,假设第一页面放a-e,第二页放f-k,当我们后面要在a-e这中间加一个索引的时候,如果之前我们就反第一页的空间放满了,那么后面所有的页面都要往后面移,如果第一页没有放满,就只要移第一页了。填充因子也就是这个页面的留下的空间。