Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 不带索引的主键(排序)-SQL2005_Sql Server_Primary Key - Fatal编程技术网

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检查/维护唯一性属性的方式。对,但“未排序”是什么意思?它的意思是“在进入顺序中”吗?