问题标签 [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.
sql - 主键是 bigint 和标识,任何首选非聚集索引而不是聚集索引的原因
我有一个这样定义的表
除了上面的 PK_MyTable NONCLUSTERED 索引之外,我在 SomeTable2Id 和 SomeTable3Id 上几乎没有其他 NONCLUSTERED 索引
我认为在上面创建 CLUSTERED 索引更有意义,但我想知道不创建 CLUSTERED 索引而是创建 NONCLUSTERED 有什么好的理由吗?
PS 有很多关于这些主题的问题,但找不到相关的问题(在前 20 名列表中)。如果有人问过这个问题,请将我重定向到相关的问题帖子。
编辑:考虑一个MyTable
映射其他两个表的情况SomeTable2
,SomeTable3
而不是有复合键,我们有这个MyTableId
所以大多数时候我的查询有一个SomeTable2Id
orSomeTable3Id
和请求获取其他 id。因此,鉴于此表的使用情况,我们真的需要在上面创建一个聚集索引MyTableId
还是两个非聚集索引SomeTable2Id
就SomeTable3Id
足够了?
sql-server - 为什么 SQL Server 在“选择 *”操作中在聚簇 PK 上使用非聚簇索引?
我有一个非常简单的表格,用于存储人们的标题(“先生”、“夫人”等)。这是我正在做的事情的简要版本(在这个例子中使用了一个临时表,但结果是一样的):
请注意,表的主键是聚集的(明确地,为了示例),并且标题列有一个非聚集的唯一性约束。
以下是选择操作的结果:
查看执行计划,SQL 使用非聚集索引而不是聚集主键。我猜这解释了为什么结果按此顺序返回,但我不知道为什么会这样。
有任何想法吗?更重要的是,有什么方法可以阻止这种行为?我希望按照插入的顺序返回行。
谢谢!
sql-server - 过滤后的非聚集索引异常行为
我有一个表,它在某些列上创建了一些过滤的非集群,例如:
和:
我在我的表上创建这个索引没有错误,但是当我想添加一个新列时,我得到这个错误:
该语句已终止。
我的表格数据是:
根据第一个索引,因为第 1 行和第 4 行不满足 where cluase 不应该在它们上创建索引。为什么会出现上述错误?
谢谢
编辑1):
有一个有趣的点。如果我删除该索引并添加列然后重新创建该索引,索引创建没有错误。奇怪!!!!
sql-server-2008 - SQL Server 2008 - 过多的非规范化和过度索引:矩阵有什么用?
我有一个崭露头角的开发人员,他对他称之为“矩阵”的东西非常热情</p>
我正在寻找同行的见解
简而言之,这就是我们所拥有的:
- 1 个高度非规范化的表,大约 120 列
- 数据点范围包括帐户、客户、家庭、关系、产品、员工等……<br> - 每列一个索引:大约 120 个非聚集索引
- 今天索引使用的数据库中大约 90% 的空间是该表上的索引
- 今天大约 150 万行有很多空值
- 表加载了一个存储过程,其核心是动态 SQL
- 所有字段名称都是通用的并且不描述数据
- 数据字典类型表与动态 SQL 一起使用以将任何数据点加载到任何字段
- 字段映射不是静态的:今天列 dim_0001 是客户名称,但明天可能是别的
- 没有主键
- 没有外键
- 没有真正的约束(例如所有字段都可以为空)
表的参数:
- 使编写查询更简单,因为它消除了编写一些连接的需要
预期用途:
- 最终用户层,将成为 Business Objects 中构建的 Universe 的核心组件
- 后 ETL 流程开发
我的建议要么终止当前的流程(测试环境中的早期开发),要么将其移至测试的下一步。
根据我所做的研究、我的教育和经验,我不支持它,并且希望在将依赖于这些表的一两个进程迁移到另一个解决方案后立即删除这些表。
下面的脚本供您参考(我仅限于一个索引示例)。
您可以提供的任何见解(即使只是一个词的意见)都是有价值的
sql-server-2005 - SQL Server:如何使用昂贵的非聚集索引搜索改进 3 连接查询
我有一个查询,它对 3 个表进行内部连接。
提到的表格中存在的数据->
- 表 A:8000 行
- 表 B:900000 行
- 表 C:10,00,000 行
以下是 SQL Server 查询计划中显示的统计信息:
这里使用了两个代价高昂的索引查找,上面的索引查找具有以下统计信息:
底部索引搜索具有以下统计信息:
现在这个查询平均需要 5 分钟才能执行,我无法弄清楚应该做些什么让它更快,因为查询已经使用了索引搜索。{所有连接都是结果集所必需的}。需要帮忙 !
non-clustered-index - 向少于 1000 行但经常访问的表添加非聚集索引会提高性能吗?
我有一个只有 400-500 行的表,但是这个表经常被访问所以我想知道是否应该在它的一个列上添加一个非聚集索引以查看任何改进?
该表始终保持相同的数据,很少更新。
这是表的结构
使用此集群索引:
该表没有主键,因为区域列可能为空,这就是为什么我还没有使用键的原因。
所以我想在列时区上添加一个非聚集索引以提高它的性能。
sql - HEAP 与具有非聚集索引的表的含义相同吗?
就 SQL 术语而言,HEAP 是否代表具有非聚集索引的表?
还是有细微差别,或者有完全不同的含义?
tsql - 如何通过避免扫描空值来减少索引扫描
我正在使用 SQL Server 2008 R2,我想在非唯一、可为空的字段上添加非聚集索引。我的索引还将包含一列,以避免访问我的聚集索引:
在实际数据中myBasicField
会有很多,NULLs
我想知道是否有一种方法可以通过不扫描这些来提高性能NULLs
,或者阻止NULL
将值存储在我的索引上。
提前致谢。
sql-server-2008 - 使用具有 IS NULL 或 OR 的过滤器表达式创建唯一索引
我正在尝试开发一个唯一索引。
我的错误是
这是另一种尝试;这个我已经删除了 ISNULL(MyField, '') 部分。为什么这个不能有一个OR
?
错误是:
sql - 在已经有聚集索引的字段上放置非聚集索引时性能会提高吗?
我昨天按照以下几行执行了更新语句:
其中SubsetTable
是一个子集,MainTable
并且具有相同的主键字段。MainTable
大约有 2 亿条记录,SubsetTable
有 50 万条记录。MainTableKey
是一个 GUID。
这两个表都有一个聚集索引MainTableKey
。
当我第一次执行这个查询时,它花了 14 个小时。
MainTableKey
然后我在两个表上都添加了一个非聚集索引。现在需要 30 分钟。
有没有人知道为什么性能增益会如此显着?