相信很多人写sql,但是都没有用到过索引,甚至不知道索引为何物?当然,很多功能不需要用索引页能实现,那么微软为什么还要设计索引这个工具呢?简单来说,就是为了提高性能。
比如说:新华字典中有很多字,我们要查其中的某一个字,怎么查?
方法一:刚开始我们可以拼音查询,恰好字典中字的排序就是拼音。
方法二:偏旁查询,可以将该字进行拆分,取出偏旁进行查询。
通过类比的思维,就可以得到索引的思路,具体如下:
问题一:假定一张表中有10w条数据,要快速的查询到某个条件下的数据,是不是相当于要遍历整张表呢?这样做的效率是非常低的,有没有更好的办法?
于是我们可以建立某个条件的索引,并且这个索引是聚集索引,相当于通过这个索引页是可以查询到相应的数据页的。
问题二:每张表可以存在多个聚集索引吗?
每张表只能有一个聚集索引(以字典为例:设置了拼音为聚集索引,则如果再设置偏旁为聚集索引,那么拼音就不是聚集索引了,即就是聚集索引同一时间只能有一个)。
问题三:聚集索引和主键之间有联系吗?
聚集索引和主键之间没有必然的联系,只是在建表的过程中,我们设定了主键,系统默认为我们创建了聚集索引。但如果先设置聚集索引,再设置主键,就可以看到两者之间没有必然的联系。主键是为了控制数据的逻辑顺序,但聚集索引时控制了数据的物理存储顺序。
问题四:非聚集索引的使用
非聚集索引包括两种类型:堆上的非聚集索引和聚集表上的非聚集索引(参见这里写链接内容)当使用堆上的非集群索引,不能找到实际的数据,但是可以找到能够直接获得数据的标识符(仅仅多了一步);聚集表上的非聚集索印是将聚集索引和非聚集索引进行了综合,先进行非聚集索引,得到非聚集索引的列表,然后再按照聚集索引的原理处理数据。
以上只是个人的看法,不一定正确,欢迎指正讨论。