• 聚集索引


    聚集索引只能存在一个,因为磁盘上的数据只能按照它的顺序组织在磁盘上.非聚集索引就是普通的索引,它可以是多个.

    下面是我在网上复制的别人的博客,讲解了聚集索引与主键的关系.

    http://www.cnblogs.com/teroy/p/3420686.html

    主键就是聚集索引吗?

     

    前言

      最近在一次面试中,讨论了一个这样的问题:主键和索引有什么区别?当时我的回答是这样的:“主键就是加了唯一性约束的聚集索引。” “你确定你所说的是对的?” 面试官反问到。 “应该是对的。” 我不加思索地回答道。 “你回去后研究一下这个问题吧。”

      难道我真的错了?

    第一次尝试

      当问题出现时,请用事实支持你的观点。

      首先,必须了解一些基本知识:对于一张表来说,聚集索引只能有一个,因为数据真实的物理存储顺序就是按照聚集索引存储的。基于这个原理,现在可以用这样的方案来测试:对一张表设置一个主键, 之后再建立一个聚集索引,假如聚集索引能创建成功, 表明主键就不是聚集索引, 如果不可以建立聚集索引,就表明主键是聚集索引。

    复制代码
    --建立一张TABLE 同时设置主键
    CREATE TABLE student
    (    
        stud_id  INT IDENTITY(1,1) NOT NULL,
        stud_name NVARCHAR(50) NOT NULL,    
        CONSTRAINT pk_student PRIMARY KEY(stud_id)    
    );
    复制代码

      接下来就尝试对这张表建立一个聚集索引吧。

    CREATE CLUSTERED INDEX index_stud_name ON student(stud_name);

      执行这条语句的时候,SQLServer的消息框弹出了这样的处理信息:“无法对 表 'student' 创建多个聚集索引。请在创建新聚集索引前删除现有的聚集索引 'pk_student'。"

      是不是我已经胜出了?

    进一步思考

      很大程度上,我应该对上述结果感到很满意的。但谨慎的思维提醒我:会不会自己遗漏了什么东西?

      来看一下关于主键的定义吧,主键是表中的一个字段或多个字段,用来唯一地标识表中的一条记录。唯一性是主键最主要的特性。在查阅建立主键的方法的时候, 一个之前被我完全忽略的创建方式突然出现在我的眼前, 在建立主键的时候可以声明为CLUETERED(聚集)或NONCLUETERED(非聚集)!也就是说主键也可以声明为非聚集索引,如下:

    CREATE TABLE student
    (
        stud_id INT IDENTITY(1,1) NOT NULL,
        stud_name NVARCHAR(20) NOT NULL,
        CONSTRAINT pk_student PRIMARY KEY NONCLUSTERED (stud_id)
    );

      在SQLServer中,主键的创建必须依赖于索引,默认创建的是聚集索引,这就解释了在上面的尝试中为什么表中已建立了聚集索引。

      可见,真的是我错了。

    后续

      园子里的朋友提到一个观点,就是跟着主键而创建的索引可以被单独删除,经我测试过,这是不可以的。

    --执行删除索引语句
    DROP INDEX pk_student ON student

      SQLServer的消息框会弹出这样的提示信息:”不允许对索引 'student.pk_student' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行。“

      如果对索引执行强制删除的话,如下图操作:

      

      结果是可以删除的,但主键也会被跟着一起删除,所以主键必须依赖于索引的观点暂时是正确的。

  • 相关阅读:
    移动设备(手机)的唯一ID有哪些
    公司跟你聊企业文化了吗
    C#并行编程-线程同步原语
    C#并行编程-并发集合
    C#并行编程-Task
    C#并行编程-Parallel
    C#并行编程-相关概念
    C#学习系列-this的使用
    C#学习系列-out与ref的区别
    C#学习系列-抽象方法与虚拟方法的区别
  • 原文地址:https://www.cnblogs.com/userrain/p/5281400.html
Copyright © 2020-2023  润新知