在上一篇文章里,我们讨论了堆表上唯一/非唯一非聚集索引。在SQL Server里没有聚集索引定义的叫堆表。当你在堆表上定义了一个聚集索引,你的表数据就会重组按聚集键的顺序进行物理存储,因为这个表叫做聚集表。这篇文章里,我想谈下唯一和非唯一聚集索引之间的区别,这2类聚集索引对存储的影响。看这个文章之前...
分类:
其他好文 时间:
2015-06-09 11:18:07
阅读次数:
144
在这篇文章里,我想详细介绍下SQL Server里唯一与非唯一非聚集索引的区别。看这个文章前,希望你已经理解了聚集和非聚集索引的概念,还有在SQL Server里是如何使用的。很多人对唯一和非唯一索引非聚集索引的认识都不是很清晰。事实上,SQL Server在存储上这2类索引有着本质的区别,这些区别...
分类:
其他好文 时间:
2015-06-08 16:53:25
阅读次数:
221
1、聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个2、聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续3、聚集索引树的叶节点存放的是数据页信息,非聚集索引的叶节点存放非聚集索引的键值,并且每个键值都有指针指向包含该键值的数据航。4、如果在一个表中要创建聚集索引...
分类:
其他好文 时间:
2015-06-06 21:54:23
阅读次数:
105
一、深入浅出理解索引结构
实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:
其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,...
分类:
其他好文 时间:
2015-06-04 21:09:57
阅读次数:
195
当我们进行SQL Server问题处理的时候,有时候会发现一个很有意思的现象:SQL Server完全忽略现有定义好的非聚集索引,直接使用表扫描来获取数据。我们来看看下面的表和索引定义: 1 CREATE TABLE Customers 2 ( 3 CustomerID INT NOT NUL...
分类:
数据库 时间:
2015-06-02 19:34:20
阅读次数:
230
在SQL Server中,非聚集索引其实可以看做是一个含有聚集索引的表,但相对实际的表来说,非聚集索引中所存储的表的列数要少得多,一般就是索引列,聚集键(或RID)。非聚集索引仅仅包含源表中的非聚集索引的列和指向实际物理表的指针。一、非聚集索引之INCLUDE 非聚集索引其实可以看做一个含有聚集.....
分类:
数据库 时间:
2015-05-31 13:51:03
阅读次数:
239
一、非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此。 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向新的数据页面,而不是更新所有相关非聚集索引的行定位器。这样,虽然降低了非聚集索引的维护开销,但...
分类:
数据库 时间:
2015-05-31 13:47:38
阅读次数:
132
聚集索引、非聚集索引、非聚集唯一索引 我们都知道建立适当的索引能够提高查询速度,优化查询。先说明一下,无论是聚集索引还是非聚集索引都是B树结构。 聚集索引默认与主键相匹配,在设置主键时,SQL Server会默认在主键列创建聚集索引。但是可以手动更改为在任意一个列创建聚集索引,然后在另一个字段...
分类:
数据库 时间:
2015-05-31 13:45:59
阅读次数:
115
一、存储结构 在SQL Server中,有许多不同的可用排列规则选项。 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D")。因为所有内容都表示为数字,所以处理起来速度最快,遗憾的是,它并不总是如人们所想象,在WHERE子句中进行比较时,使用该选项会造成...
分类:
数据库 时间:
2015-05-31 12:15:27
阅读次数:
450
SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列; 使用窄索引; 检查列的选择性; 检查列的数据类型; 考虑列顺序; 考虑索引类型(聚集索引OR非聚集索引);一、检查WHERE条件列和链接条件列 当一个查询提交到SQL Server时,查询优化器尝试为...
分类:
数据库 时间:
2015-05-31 12:13:44
阅读次数:
298