没有默认索引的主键(排序) - SQL 2005

时间:2010-11-25 07:55:27

标签: sql-server primary-key

如何关闭主键上的默认索引 我不希望我的所有表都被索引(排序),但它们必须有一个主键

4 个答案:

答案 0 :(得分:1)

您可以将主键索引定义为NONCLUSTERED,以防止根据主键对表行进行排序,但如果没有某些关联索引,则无法定义主键。

答案 1 :(得分:1)

表总是未排序 - 表没有“默认”顺序,如果存在索引,优化器可能会也可能不会选择使用索引。

在SQL Server中,索引实际上是实现密钥的唯一方法。您可以在聚簇索引或非聚簇索引之间进行选择 - 这就是全部。

答案 2 :(得分:0)

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)
)

答案 3 :(得分:0)

“我不希望所有表格都被排序”是什么意思?如果这意味着您希望行按照输入的顺序出现,那么只有一种方法可以保证它:有一个存储该订单的字段(或者如果您没有很多交易的时间) 。在这种情况下,您将希望在该字段上具有聚集索引以获得最佳性能 您最终可能会在autonumber_or_timestamp字段上使用非群集PK(如productId)和群集唯一索引以获得最佳性能。
但这实际上取决于你试图建模的现实,而你的问题包含的信息太少。数据库设计不是抽象思维。