前言
在SQL 2012
学习过程的基础
教程,偶尔会穿插其他内容进行讲解,我相信阅读SQL Server 2012 T-SQL基础教程孩子知道并不是所有的内容写在书的前面的内容被
复制,那么它将没有任何意义,学习过程必须在同时也是一个思考的过程,无论是
独立思考或查资料或是思维不只是,或在一段时间内会忘记。短的内容,深刻理解。
话题
非聚集索引定义:非聚集索引也是B树结构。与聚集索引不同,B树的叶节点存储指向堆或聚集索引的指针。你能举个例子吗事实上,这一节的结尾是为了表达这个意思,这个定义太长了,我们抽象了一点定义并得出了最后的结论,请往下看。
聚集指数对非聚集指数的
影响 聚类索引和非聚集索引的概念、原理和
创建将不进一步描述。如果你不太了解,请向公园里的其他花园朋友们咨询。
首先,我们创建一个测试表
使用sqlstudy
创建表{ } { }(测试dbo。
{ }不为null,
{一} { nchar }(10)空,
{二} { nchar }(10)空
)
然后让我们再次创建测试数据。
插入{ sqlstudy }。{ } { } dbo。试验({id},{一},{二})
选择1,'first1 ','second1
联盟的所有
选择2,'first2 ','second2
联盟的所有
选择3,'first3 ','second3
联盟的所有
选择4,'first4 ','second4
联盟的所有
选择5,'first5 ','second5
然后,我们在表的第一列和第二列上创建一个聚合索引,如下所示
创建非聚集索引{ } { }对ix_mytable_nonclustered(dbo。{测试}
{第一个ASC,
{第二个ASC
)
此时,我们同时
运行两个
查询来查看它的
执行计划:最后一个已经说过,请
启用包含实际执行的计划。
选择ID
FROM {dbo}.{Test} WHERE {First} ='First1'AND {Second} ='Second1'
选择二
从{ } { }在测试dbo。{第一} = 'first1'and {二} = 'second1
我们在这个时候看到的实施计划如下:
毫无疑问,我们可以得出结论,查询1是全表扫描,使用和查询2使用非聚集索引查找。我们应该毫不怀疑这个结论,因为第二查询第二列创建非聚集索引之前,和身份证查询1,它将导致全扫描查询1查询,而2是非聚集索引查找。
下面我们为表中的列id创建一个聚合索引。
创建聚集索引{ } { }对ix_mytable_clustered(dbo。{测试}
{ ASC
)
此时,我们再次运行以下查询:
选择ID
从{ } { }在测试dbo。{第一} = 'first1'and {二} = 'second1
选择二
从{ } { }在测试dbo。{第一} = 'first1'and {二} = 'second1
看看此时的查询执行计划。
通过上面我们给栏目ID创建一个聚集索引,我们可以马上知道它们
都是用索引来查找的,的确是,但是,你注意到了,眼睛看到了,当我们在列ID中创建的是聚集索引理论时,应该只查聚集索引,啊,这是我们要讨论的问题。
关于问题的讨论
我们将关注这个问题的概述,当我们在列上创建聚集索引时,查询返回列,而查询
条件是创建一个非聚集索引,此时创建查询执行计划的聚集索引列是一个非聚集索引
搜索,到底发生了什么
实际的
情况是一个非聚集索引的内部
参考的聚集索引,当聚集索引后,表中的数据将根据物理逻辑
排序创建,如果没有创建聚集索引,非聚集索引指向表中的数据和最终数据返回,但是一旦创建非聚集索引聚集指数将指向重建聚集索引,这里的careyson公园的朋友非聚集索引:聚集索引的描述是一个B树结构,与聚集索引不同的是,树的叶子节点存储指针堆或聚集索引的推广是非常精确的。如果我们创建聚集索引,那么非聚集索引的指针将指向聚集索引,否则将指向堆,即表中的数据。
在这一点上,我们可以得出结论,当在检索的列上创建聚集索引(只返回创建聚集索引列)时,查询不使用聚集索引查找来检索结果,而是使用非聚集索引查找来检索结果。
总结
之前我们必须先把这个问题作了一个界定的个人感受,如非聚集索引的定义:非聚集索引B树结构,和聚集索引B树的叶子节点,存储一个指向堆或聚集索引。第一次看到这句话没有什么感觉,一般来说,感觉似乎明白了,当遇到这样的问题时,它实际上是在亏损的理解不够深入或不确定时,当你可以把这一定义或场景的例子,它可能真的理解。这是本文的结束部分。对于SQL,本系列将简要地说明内容和深刻理解。同时,它也会一步步地谈论查询
性能问题,从抛出问题到最终
解决问题都是大量的商品。
以上就是本文的全部内容。希望本文的内容能给大家的学习或
工作带来一定的帮助。如果有疑问,你可以留言交流,希望你能得到更多的
支持。