sql - 索引基本上是表的副本吗?
问题描述
今天我去参加工作面试,在那里我听说“索引基本上是表格的克隆,它们是在上面制作的”。
有人可以与此声明相关吗?老实说,我从未听说过这种索引定义
解决方案
不是真的,虽然他们可能是。
每个索引(包括聚集索引)都将使用其所有内部节点中的索引键。不同的是当我们到达索引的叶子时会发生什么。
在 SQL Server 中一个普通的老式非聚集索引中,您会在叶子中找到聚集索引的键值(或堆表的某种形式的行 ID)。而在聚集索引中,您将找到所有列的值,而不仅仅是那些聚集键和(对于该索引)它是特定键的值。
INCLUDE
in 索引通过在非聚集索引中包含叶级别的额外列,在某种程度上使水变得混乱。
如果非聚集索引(索引键、聚集索引键、包含列)中的总列集与表中所有列的集相同,那么在一定程度上非聚集索引似乎确实成为表的副本 - 至少在使用该索引的任何查询都不必执行任何表查找来检索所有数据的范围内。
如果上面的列集与表中所有列的集不同,则它不是表的副本。它是表列子集的副本。当然,如果该列子集是特定查询所需的所有列,则仍然可以避免表查找。
推荐阅读
- python - 我无法在我的代码中保存 cookie,你能帮帮我吗?硒,泡菜,蟒蛇
- python - 提取包含特定关键字的推文链接
- gnupg - 是否可以从过期的 gpg 文件中导入密钥?
- python - Pandas:为什么在 Titanic 数据库电子表格中缺少 Column 会将 dtype 作为对象?
- c++ - UWP 应用程序在 Class1 崩溃 c1 = new Class1(); 说 - 找不到指定的模块。(来自 HRESULT 的异常:0x8007007E
- git - Git / VSCode 错误或云错误
- git - 镜像远程 Git 存储库,包括使用脚本获取的子存储库
- python - ValueError:int() 的无效文字,以 10 为底:计算器中的“+”
- jenkins - 由于 SDK 过时,Jenkins Android 模拟器正在运行。我如何在詹金斯上更新它
- spring-integration - redisQueueInboundGateway.setReplyChannelName 是什么