Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 复合非聚集索引和非聚集包含索引树结构的区别_Sql Server_Sql Server 2008_Indexing - Fatal编程技术网

Sql server 复合非聚集索引和非聚集包含索引树结构的区别

Sql server 复合非聚集索引和非聚集包含索引树结构的区别,sql-server,sql-server-2008,indexing,Sql Server,Sql Server 2008,Indexing,我试着在几个小时后用谷歌搜索它,但我仍然不清楚 以下两者之间的区别是什么: Create Index NonClusteredComposit_IDX ON Table(id,quantity,price) Create Index NonClusteredCompositAndInclude_IDX ON Table(id) Include (price,quantity). 仅在索引lvl上 我了解它们如何工作,甚至何时使用它们 但我不明白的是,数据是如何存储在非集群组件和include\

我试着在几个小时后用谷歌搜索它,但我仍然不清楚

以下两者之间的区别是什么:

Create Index NonClusteredComposit_IDX ON Table(id,quantity,price)
Create Index NonClusteredCompositAndInclude_IDX ON Table(id) Include (price,quantity).
仅在索引lvl上

我了解它们如何工作,甚至何时使用它们

但我不明白的是,数据是如何存储在非集群组件和include\u IDX中的

此架构会发生什么变化,其中: 索引页包含索引数据(id、数量、价格)和指向RID的指针(当表是堆时)或指向B树中的页的指针(对于B树/集群表)

从文档中,我知道,当我包含列时,数据存储在叶节点中,但如果我们讨论的是索引内部的体系结构,我看不出这和(1,2,3)上的普通索引有什么区别

有谁能描述一下索引体系结构的不同之处吗?
谢谢

在第一种方法中,排序将基于这三个属性—id、数量和价格

在第二种方法中,排序将仅基于“id”,但“id”包含“quantity,price”的值,因此不需要执行键查找或rid查找来获得相应的属性

为了说明这一点,如果您在其中一个表中创建以下索引,两个表都会进行索引查找,但如果您检查读取的行数,则它会随着从排序数据中提取的行数而不同,第二种方法会对所选的“id”进行完全扫描

在检查第一个索引的读取次数时

在检查第二个索引的读取次数时,它证明它对查找数据的索引进行了完全扫描,因此得到188条记录


两个索引之间的区别在于,哪些数据作为索引键的一部分包含在索引中,而哪些数据仅作为叶节点上的数据包含在索引中。在没有包含的索引中,只存储指向聚集索引(或堆rowid)的指针—基本上是指向整行的指针。在包含索引的索引上,而不是指向整行的指针(需要书签查找),只存储包含的数据。这就是我要找的!谢谢你,请提供详细的说明,回答很好。