PRIMARY KEY 约束
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。当为表指定 PRIMARY KEY 约束时,Microsoft® SQL Server™ 2000 通过为主键列创建唯一索引强制数据的唯一性。当在查询中使用主键时,该索引还可用来对数据进行快速访问。

解决方案 »

  1.   

    表索引
    Microsoft® SQL Server™ 2000 支持在表中任何列(包括计算列)上定义的索引。如果一个表没有创建索引,则数据行不按任何特定的顺序存储。这种结构称为堆集。SQL Server 索引的两种类型为: 聚集 
    聚集索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。数据行本身构成聚集索引的最低级别。只有当表包含聚集索引时,表内的数据行才按排序次序存储。如果表没有聚集索引,则其数据行按堆集方式存储。非聚集 
    非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。在非聚集索引内,从索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页的存储方式是堆集还是聚集。对于堆集,行定位器是指向行的指针。对于有聚集索引的表,行定位器是聚集索引键。只有在表上创建了聚集索引时,表内的行才按特定的顺序存储。这些行就基于聚集索引键按顺序存储。如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储。索引可以是唯一的,这意味着不会有两行有相同的索引键值。另外,索引也可以不是唯一的,多个行可以共享同一键值。有两种方法可以在 SQL Server 内定义索引。CREATE INDEX 语句创建并命名索引。CREATE TABLE 语句支持在创建索引时使用下列约束: PRIMARY KEY 创建唯一索引来强制执行主键。
    UNIQUE 创建唯一索引。
    CLUSTERED 创建聚集索引。
    NONCLUSTERED 创建非聚集索引。 
    当在 SQL Server 2000 上创建索引时,可指定是按升序还是降序存储键。SQL Server 2000 支持在计算列上定义的索引,只要为列定义的表达式满足某些限制,如仅引用包含计算列的表中的列、具有确定性等。填充因子是 SQL Server 索引的一个属性,它控制索引在创建时的填充密度。默认的填充因子通常能够提供较好的性能,但在某些情况下,更改填充因子可能会有益。如果打算对表执行许多更新和插入,则可在创建索引时使用小填充因子,以便为后面的键留出更多的空间。如果是不会更改的只读表,则可在创建索引时使用大填充因子,以减小索引的物理大小,这样可以降低 SQL Server 浏览索引时的磁盘读取次数。只有在创建索引时才能应用填充因子。随着键的插入和删除,索引最终将稳定在某个密度上。索引不仅可以提高选择行的检索速度,通常还可以提高更新和删除的速度。这是因为 SQL Server 在更新或删除行时必须先找到该行。使用索引定位行提高了效率,这通常可以弥补更新索引所需的额外开销,除非表中有很多索引。下例显示在表上创建索引的 Transact-SQL 语法。USE pubs
    GO
    CREATE TABLE emp_sample
       (emp_id      int         PRIMARY KEY CLUSTERED,
       emp_name      char(50),
       emp_address   char(50),
       emp_title   char(25)      UNIQUE NONCLUSTERED )
    GO
    CREATE NONCLUSTERED INDEX sample_nonclust ON emp_sample(emp_name)
    GO对于具体什么样的索引集可优化性能这个问题,取决于系统中的查询混合。考察 emp_sample.emp_id 上的聚集索引。如果大多数引用 emp_sample 的查询在它们的 WHERE 子句中有关于 emp_id 的等式或范围比较,聚集索引将发挥很好的作用。如果大多数查询的 WHERE 子句引用的是 emp_name 而非 emp_id,则通过将 emp_name 上的索引置为聚集索引可提高性能。许多应用程序的查询混合都很复杂,单靠询问用户和程序员很难进行评估。SQL Server 2000 提供索引优化向导,帮助您在数据库中设计索引。对具有复杂访问模式的大型架构,最简单的设计索引的方法是使用索引优化向导。可以为索引优化向导提供一组 SQL 语句。这组语句可以是为反映系统中典型的语句混合而生成的语句脚本。不过,这组语句通常是 SQL 事件探查器跟踪记录,记录在系统典型负载期间系统上实际处理的 SQL 语句。索引优化向导分析工作负荷和数据库,然后提出可提高工作负荷性能的索引配置建议。可以选择替换现有的索引配置,或者保留现有的索引配置并实现新的索引,以提高执行速度慢的查询子集的性能。
    请参见