初探Sql Server聚族和非聚族索引

聚族索引:聚族索引的顺序就是数据物理存储排列顺序sql

非聚族索引:索引顺序与数据物理存储排列顺序无关优化

一个表最多只有一个聚族索引spa


sql server中,索引是经过二叉树来描述的,具体定义:指针

聚族索引:索引的叶子节点就是数据节点server

非聚族索引:索引的叶子节点任是索引节点,只是有一个指针指向对应的数据块索引



索引块和数据块区别效率


索引能够提升检索效率,由于其二叉数结构以及占用空间小,因此访问速度快二叉树

eg:表中的一条记录在磁盘上占用1000字节,咱们对其中10个字节的一个字段创建索引,那么该记录对应的索引块的大小只有10字节。遍历

sql server 的最小空间分配单元是“page”页,若一个页在磁盘上占用8K空间,那么这一个页能够存储上述记录8条,但能够存储索引8000/10=800条。im

咱们须要从一个有8000条记录的表中检索符合某个条件的记录,

如没有索引时,咱们可能须要遍历8000×1000/8000=1000个页才能找到结果;

若在检索字段上面有上述索引时,那咱们能够在8000×10/8000=10个页就能检索到知足条件的索引块,而后根据索引块上的指针一一找到数据块,这样IO访问量少不少


索引的优化


索引有时不必定检索的快,有时索引还不如不用索引快

eg:咱们检索上述表中全部记录,

如没有索引时,咱们可能须要遍历8000×1000/8000=1000个页才能找到结果;

如使用索引,则先检索索引,那咱们能够在8000×10/8000=10个页获得索引的结果,再根据索引结果去对应数据页,因为检索全部数据,因此须要访问8000×1000/8000=1000个页将所有数据读取出来,一共访问了1000+10=1010个页面,这显然不如不用索引快


sql server内部有一套完整的数据检索优化技术,在上述状况下,sql server的查询计划(Search Plan)会自动使用表扫描的方式检索数据而不会使用任何索引。sql server是怎么知道何时使用索引,何时不使用索引?sql server除了平常维护信息外,还维护着数据统计信息(数据密度信息、数据分布信息)这些信息决定如何制定查询计划以及查询是否使用索引及什么样的索引

相关文章
相关标签/搜索