zoukankan      html  css  js  c++  java
  • 索引

    首先主键和索引的区别

    主键(PRIMARY KEY )

    来自MSDN的描述:

    表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。

    一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。

    如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。
    创建主键时,数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。

     

    聚集索引

    聚集索引基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。

    每个表几乎都对列定义聚集索引来实现下列功能:

    • 可用于经常使用的查询。
    • 提供高度唯一性。

    两者的比较

    下面是一个简单的比较表

     

    主键

    聚集索引

    用途

    强制表的实体完整性

    对数据行的排序,方便查询用

    一个表多少个

    一个表最多一个主键

    一个表最多一个聚集索引

    是否允许多个字段来定义

    一个主键可以多个字段来定义

    一个索引可以多个字段来定义

         

    是否允许 null 数据行出现

    如果要创建的数据列中数据存在null,无法建立主键。
    创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。

    没有限制建立聚集索引的列一定必须 not null .
    也就是可以列的数据是 null
    参看最后一项比较

    是否要求数据必须唯一

    要求数据必须唯一

    数据即可以唯一,也可以不唯一。看你定义这个索引的 UNIQUE 设置。
    (这一点需要看后面的一个比较,虽然你的数据列可能不唯一,但是系统会替你产生一个你看不到的唯一列)

         

    创建的逻辑

    数据库在创建主键同时,会自动建立一个唯一索引。
    如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引

    如果未使用 UNIQUE 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。
    必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

    创建索引的SQL命令的一般格式:

    CREATE [UNIQUE] /*是否是唯一索引*/
    [CLUSTERED|NONCLUSTERED] /*索引的组织方式*/
    INDEX index_name /*索引名称*/
    ON {table|view}(column[ASC|DESC[,...N]]) /*索引定义的依据*/
    [WITH<index_option>[,...n]] /*索引选项*/
    [ON filegroup] /*索引所在文件组*/
    <index_option>::=
    {PAD_INDEX
        |FILLFACTOR = fillfactor
        |IGNORE_DUP_KEY
        |DROP_EXISTING
        |STATISTICS_NORECOMPUTE
        |SORT_IN_TEMPDB
    }

    惟一索引:即不允许存在索引值相同的两行。

    • 视图创建的索引必须是UNIQUE索引
    • 一个表或视图只允许有一个聚集索引,并且必须先为表或视图创建惟一聚集索引后,然后才能创建非聚集索引。(可以根据上面主键的创建逻辑来看,只要有主键的表是可以创建非聚集索引的)

    例子:

    为KC表的课程名列创建索引

    USE Students
    CREATE INDEX kc_name_ind ON KC(课程名称)
    GO
    

    KC表的课程号列创建惟一聚集索引

    USE Students
    CREATE UNIQUE CLUSTERED INDEX kc_id_ind ON KC(课程号)
    GO
    

    删除索引:

    DROP INDEX 'table.index|view.index'
  • 相关阅读:
    深入了解CSS3新特性(转)
    微小,但是美好的改变 G2 2.2发布
    可视化框架设计-数据调整
    可视化框架设计-图表类型
    可视化框架设计-数据流
    人之初,性本动
    可视化框架设计-坐标系
    可视化框架设计-视觉通道
    可视化框架设计-数据类型
    可视化框架设计-整体思路
  • 原文地址:https://www.cnblogs.com/herbert/p/1772942.html
Copyright © 2011-2022 走看看