主键上的非聚集索引?

Posted

技术标签:

【中文标题】主键上的非聚集索引?【英文标题】:Nonclustered indexes on primary keys? 【发布时间】:2020-07-28 09:49:00 【问题描述】:

我没有太多关于 SQL 的经验或知识。我被分配了一个需要创建数据库思想的项目。我刚刚完成它并生成了 SQL 代码以通过 Oracle Data Builder 创建数据库。在脚本中,我可以看到大多数表使用每个表中的所有主键作为唯一的非聚集索引。我从来没有听说过 SQL 索引,所以我用谷歌搜索了它,现在我有了一个想法,但仍然很困惑。将主键用作非聚集索引是否很常见?我还读到 SQL Server 自动使用主键作为聚集索引。他们可以两者兼而有之吗?您能否给我一个使用聚集索引或非聚集索引的场景示例,以便我评估它是否对我的数据库有意义?我将不胜感激任何帮助。谢谢

编辑:为了澄清数据库将用于存储有关轮班期间不同机器的生产和状态的数据。 20 个表中的每一个平均有 4 个 PK(通常是日期、班次、时间、机器 ID),并且数据库预计将处理大量数据,因为它每天在不同的机器上存储来自每个班次的大量信息。此外,客户端会将所有表格中的数据收集到一份报告中,该报告将显示给用户或导出为 CSV 文件。

【问题讨论】:

在 SQL Server 中,对主键使用非聚集索引并不常见(因为聚集索引是默认的),但是,例如在 Oracle 中,默认为主键使用非聚集索引。跨度> 这能回答你的问题吗? When should a primary key be declared non-clustered? 这能回答你的问题吗? How to choose the clustered index in SQL Server? 没有经验或知识的人不应该在没有帮助和指导的情况下设计数据库 - 就这么简单。我也不认为您使用 Oracle 产品来实现 MS SQL Server 数据库是一个好兆头。现在是引入代码审查(在本例中为模式审查)以利用他人的知识、自己获取知识并记录您的模式以及推动您做出决策的原因的好时机。 请注意——“轮班工作”总是一个有问题的概念。 【参考方案1】:

默认情况下,SQL Server 使用主键作为聚集索引键,但在某些情况下 DBA 会更改它,因此可以使用主键作为非聚集索引键。如果您的情况是正常使用,出于性能原因,第一种情况会更好。

查看:https://blog.sqlauthority.com/2013/02/10/sql-server-primary-key-and-nonclustered-index-in-simple-words/

【讨论】:

它比这更复杂 - Larnu 发布的链接提供了更好的细节。例如,您的帖子甚至没有提到 uniqueidentifier 主键。

以上是关于主键上的非聚集索引?的主要内容,如果未能解决你的问题,请参考以下文章

堆上的非聚集索引与聚集索引的性能 [关闭]

MySQL中怎样创建聚集索引和非聚集索引,求创建这两种索引的SQL语句。谢谢

SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复

怎么取消自增列上的聚集索引

SQL SERVER大话存储结构

非聚集索引和聚集索引