Sql server 不带索引的主键(排序)-SQL2005
如何关闭主键上的默认索引Sql server 不带索引的主键(排序)-SQL2005,sql-server,primary-key,Sql Server,Primary Key,如何关闭主键上的默认索引 我不希望所有表都被索引(排序),但它们必须有主键您可以将主键索引定义为非聚集,以防止表行按照主键排序,但是,如果没有相关联的索引,就无法定义主键。SQL Server实现主键和唯一键的方法是在这些列上放置索引。因此,如果没有索引,就不能有主键(或唯一约束) 您可以告诉SQL Server使用非聚集索引来实现这些索引。如果一个表上只有非聚集索引(或者根本没有索引),那么就有一个堆。这是你真正想要的,这是非常罕见的 仅仅因为一个表有一个聚集索引,这并不意味着表中的行将按照该
我不希望所有表都被索引(排序),但它们必须有主键您可以将主键索引定义为
非聚集
,以防止表行按照主键排序,但是,如果没有相关联的索引,就无法定义主键。SQL Server实现主键和唯一键的方法是在这些列上放置索引。因此,如果没有索引,就不能有主键(或唯一约束)
您可以告诉SQL Server使用非聚集索引来实现这些索引。如果一个表上只有非聚集索引(或者根本没有索引),那么就有一个堆。这是你真正想要的,这是非常罕见的
仅仅因为一个表有一个聚集索引,这并不意味着表中的行将按照该索引定义的“顺序”返回——事实上,行通常按照该顺序返回是一个实现难题
实际代码是:
CREATE TABLE T (
Column1 char(1) not null,
Column2 char(1) not null,
Column3 char(1) not null,
constraint PK_T PRIMARY KEY NONCLUSTERED (Column2,Column3)
)
表格总是未排序的-表格没有“默认”顺序,如果存在索引,则优化人员可以选择使用索引,也可以不使用索引 在SQL Server中,索引实际上是实现密钥的唯一方法。您可以在聚集索引和非聚集索引之间进行选择—仅此而已。什么是“我不希望所有表都排序”呢?如果这意味着您希望行按输入的顺序显示,那么只有一种方法可以保证这一点:有一个字段存储该顺序(或者如果您没有很多事务,则存储时间)。在这种情况下,您需要在该字段上设置聚集索引以获得最佳性能。
您可能会得到一个非聚集的PK(如productId)和一个聚集的唯一索引(位于自动编号\u或\u时间戳字段上),以获得最高性能。
但这实际上取决于你试图建模的现实,而你的问题包含的信息太少。DB设计不是抽象思维。您可以定义主键而不需要任何索引,但实际上不是recommended@Mitch小麦-嗯。。。我没有意识到这一点。你能发布一个创建PK约束但不隐式创建索引的示例语句吗?@Mitch-Wheat-我敢肯定你不能。索引结构是SQL Server检查/维护唯一性属性的方式。对,但“未排序”是什么意思?它的意思是“在进入顺序中”吗?