问题标签 [non-clustered-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3374 浏览

sql - SQL Server:未使用非聚集索引

我已经阅读了很多关于索引和它们之间的差异的内容。现在我正在我的项目中进行查询优化。我创建了非聚集索引,应该在查询执行时使用,但事实并非如此。详情如下:

桌子:

在此处输入图像描述

指数:

实体框架生成的查询:

执行计划:

在此处输入图像描述

缺少索引详细信息:

我知道通过将 AssetId 和 Active 列包含到索引中,将使用索引。

现在,为什么没有列包含它就不能工作?

这是另一个查询的简化示例,其中所有列都作为结果被提取。(强制)索引查找使用的唯一解决方案是将所有列包含在索引中,它具有相同的估计子树成本(显然)。

另一个烦人的问题是排序无知。日期列在索引中并设置为 DESCENDING。它被完全忽略了,当然,排序操作在执行计划中占据了昂贵的位置。

更新 1:

正如@Jayachandran 指出的那样,IndexSeek + KeyLookUp 应该在上面的查询中使用,但是覆盖索引有据可查,并且它假定应该包括 AssetId 和 Active 列。我同意这一点。

我正在创建 UPDATE 1 以在下面的查询中演示覆盖索引的有用性。同一张表,更大的结果集。据我所知,不应在索引中使用单个列,并且为 Date 和 Deleted 列创建索引。

0 投票
2 回答
4915 浏览

mysql - SQL中基于聚集索引和非聚集索引优化查询?

我最近一直在阅读有关如何clustered indexnon-clustered index工作的信息。我的理解很简单(如果错了,请纠正我):

clustered支持的数据结构non-clustered indexB-Tree

Clustered Index:根据索引列(或键)对数据进行物理排序。你只能有一个clustered Index每个table. 如果index在建表时指定 no,SQL服务器会自动clustered Indexprimary key column.

Q1:由于数据是基于索引进行物理排序的,所以这里不需要额外的空间。这个对吗?那么当我删除我创建的索引时会发生什么?

Non-clustered Index:在中non-clustered indexesleaf-node树的 包含列值和指向数据库中实际行的指针(行定位器)。这里需要额外的空间将其non-clustered index table物理存储在磁盘上。但是,一个不受数量的限制non-clustered Indexes.

Q2 : 这是否意味着对非聚集索引列的查询不会产生排序后的数据?

Q3:这里有一个额外的查找关联,以使用叶节点处的指针定位实际的行数据。与聚集索引相比,这会有多大的性能差异?

练习:

考虑一个 Employee 表:

现在我创建了一个员工表(创建了员工的默认聚集索引)。

此表上的两个频繁查询仅发生在年龄和工资列上。为简单起见,假设该表不经常更新

例如:

Q4:构建索引的最佳方法是什么,以便对这两个列的查询具有相似的性能。如果我对年龄列有聚集索引,则年龄列上的查询会更快,但比薪水列上的查询速度会慢。

Q5:在相关的说明中,我反复看到应该在具有唯一约束的列上创建索引(集群和非集群)。这是为什么?如果不这样做会发生什么?

非常感谢我阅读的帖子在这里:

http://javarevisited.blogspot.com/2013/08/difference-between-clustered-index-and-nonclustered-index-sql-server-database.html

http://msdn.microsoft.com/en-us/library/ms190457.aspx

集群与非集群

聚集索引和非聚集索引实际上是什么意思?

聚集索引和非聚集索引有什么区别?

数据库索引如何工作?

0 投票
1 回答
6798 浏览

sql-server - 什么是非聚集索引扫描

我知道什么是表扫描、聚集索引扫描和索引搜索,但我的谷歌技能让我无法找到非聚集索引扫描的精确解释。为什么以及何时查询使用非聚集索引扫描?

谢谢你。

0 投票
2 回答
10316 浏览

sql-server - SQL Server:创建非聚集索引而不为其命名

我使用 SQL Server 2008。

我正在尝试在我的表上创建一个非聚集索引。我想检查是否有一种方法可以在不给索引命名的情况下创建它。

例如

当我向该表添加 PK 时,我没有指定该键的名称。例如

是否可以在不指定名称的情况下执行类似的操作来创建非聚集索引?

例如

我知道的唯一命令是

0 投票
1 回答
211 浏览

sql-server - 具有数百万行的表中的聚集索引和非聚集索引的最佳实践

我们在 Sql Server 2008 中有表,列如下

这里 CLI_ID , INSURANCEPOliCY_No 是复合主键。表中有超过 2 千万行。现在我们正在 CLI_ID 上创建一个非聚集索引。这会提高搜索性能还是告诉我任何方法它更快。感谢任何帮助。

0 投票
1 回答
347 浏览

sql-server - 为什么我的 SQL 查询正在读取更多页面但速度更快?

我正在测试一些要添加到视图内的表中的非聚集索引(具有 7 个内部连接)。在运行 Tunning Advisor (SQL Server 2008) 之后,它向我展示了一个脚本,用于在表 (a) 中创建一个非聚集索引,这可以帮助我优化查询。

在创建索引之前,我运行了查询并获得了 IO 和 TIME 统计信息:

创建非聚集索引后,我得到了这个:

检查行AC ,我在A中读取了近 300 页,而在B中仅读取了 32页。那么为什么这个查询更快呢?我一直认为查询读取的页面越多,性能越差

0 投票
1 回答
53 浏览

sql - 当非聚集索引有很多具有相同值的键时,它是如何工作的

假设我有一个包含列(id、name、gender、age)的堆表

如果我在“name”列中有一个 NonClustered 索引,如果我有 10 个名为“Lucas”的人会怎样?索引是否知道他指的是哪一个“卢卡斯”?如果 Lucas 有这么多,以至于它们在 B-Tree 叶子的不同页面中被分开,那么索引是否仍然知道如何找到它们以及他必须为每个“Lucas”指向哪一行?

0 投票
1 回答
7030 浏览

sql-server - 如何在我的搜索表列上创建临时非聚集索引并在选择操作后将其删除

我有 1 个可以返回超过 1000 条记录的存储过程。

我想在我的搜索表列上创建临时非集群索引,因为我听说非集群索引会加快数据检索(SELECT)操作并减慢数据更新(更新和删除)操作并在我之后删除该非集群索引操作已经完成。

就像我有 2 个表 UserDetails 和 CategoryMaster 以及我的搜索字段:

  • 用户详细信息(服务描述、技能)
  • 类别大师(姓名)

这是我的存储过程:

我的UserDetails创建查询:

那么是否可以在存储过程中创建临时非集群索引并在选择操作后删除该非集群索引????

0 投票
1 回答
3399 浏览

sql - 非聚集索引在 SQL Server 中的工作原理

我有一个与 DB 理论有关的问题:

假设我们有 3 列的表:[PersonID], [PersonName], [PersonAge].

我们知道,当我们有一个按一列的非聚集索引时,SQL Server 会按照指定的列对表数据进行排序,并从中构建 B+ 树。当我们需要使用这样的索引来查找行时,SQL Server 通过比较一个原子数据对象(intstring,例如)来扫描 B++ 树。很清楚,当我们按一列构建非聚集索引时(假设[PersonName]),非聚集索引是如何工作和查找数据的,但是如果我们按两列创建非聚集索引呢:[PersonName][PersonAge]

我知道,在排序过程中,最重要的标准将是[PersonName],如果有几条记录相同,那么它们将按[PersonAge]. 但是,SQL Server 将如何根据该索引物理处理 B++ 树?

当它应该执行查询时它将如何使用这样的树

谢谢你的解释。

0 投票
1 回答
31 浏览

sql - 无法达到索引大小

我在表列上创建了一个非聚集索引,它包含 5GB 的索引数据,但我无法在我的磁盘上看到这个 +5GB 的数据大小变化。

有什么建议么?

谢谢