学习笔记12
Posted 我是墩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记12相关的知识,希望对你有一定的参考价值。
SQL SERVER提供了两种索引:聚集索引和非聚集索引。
其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。
非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
非聚集索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。对于非聚集索引,可以为在表非聚集索引中查找数据时常用的每个列创建一个非聚集索引。有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。
我们来区分一下聚集索引和非聚集索引。
一.聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
1.聚集索引使用注意事项
①定义聚集索引键时使用的列越少越好。
②包含大量非重复值的列。
③使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
④被连续访问的列。
⑤回大型结果集的查询。
经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。
⑥OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。
2.聚集索引不适用于:
①频繁更改的列。这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。
②宽键。来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。
二.非聚集索引:数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。
1.非聚集索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。对于非聚集索引,可以为在表非聚集索引中查找数据时常用的每个列创建一个非聚集索引。有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。
2.一个通俗的举例,说明两者的区别
其实,汉语字典的正文本身就是一个聚集索引。比如,要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明的字典中没有这个字;同样的,如果查“张”字,那也会将的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,不需要再去查其他目录来找到需要找的内容。把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
.如果认识某个字,可以快速地从自动中查到这个字。但也可能会遇到不认识的字,不知道它的发音,这时候,就不能按照刚才的方法找到要查的字,而需要去根据“偏旁部首”查到要找的字,然后根据这个字后的页码直接翻到某页来找到要找的字。
但结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如查“张”字,可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。
可以通过这种方式来找到所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到所需要的页码。把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
以上是关于学习笔记12的主要内容,如果未能解决你的问题,请参考以下文章