SQLServer 索引与数据完整性---学习笔记

索引

  • 索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针

  • 索引是一个单独的、物理的数据库结构,在SQL Server中,索引是为了加速对表中数据行的检索而创建的一种分散存储结构。
    它是针对一个表而建立的,每个索引页面中的行都含有逻辑指针,指向数据表中的物理位置,以便加速检索物理数据

  • 一个表的存储是由两部分组成的,一部分用来存放数据页,另一部分用来存放索引页。 通常索引页对于数据页来说小得多。
    在进行数据检索时,系统首先搜索索引页,从中找到所需数据的指针,
    然后通过该指针从数据页读取数据,从而提高查询速度

  • 索引是与表或视图关联的磁盘上的结构,可以加快从表或视图中检索行的速度

  • 索引具有以下几个优点。
    创建唯一性索引,保证数据库表中每一行数据的唯一性。
    大大加快数据的检索速度,这也是创建索引的最主要原因。
    加速表与表之间的连接,特别是在实现数据的完整性方面有特别的意义。
    在使用分组和排序子句进行数据检索时,同样可以减少查询中分组和排序的时间。
    通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

  • 索引具有以下几个缺点
    创建索引和维护索引需耗费时间,并随着数据量的增加而增加。
    索引需占用物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,
    如果建立聚集索引,那么需要的空间就会更大。
    当对表中的数据进行增加、删除和修改时,索引也要动态地维护,降低数据的维护速度。

  • 索引类型主要有以下几类:

  • 聚集索引

  • 非聚集索引

  • 唯一索引

  • 包含性列索引

  • 索引视图

  • 全文索引

  • 空间索引

  • 筛选索引

  • XML索引

  • 存储结构可以将索引分为两类:聚集索引和非聚集索引。

  • 聚集索引:根据数据行的键值在表或视图中排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序

  • 如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中

  • 聚集索引除了可以提高查询性能,还可以按需重新生成或重新组织控制表碎片

  • 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针

  • 从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针;对于聚集表,行定位器是聚集索引键

  • 创建索引的一般原则如下。

    (1)只有表的所有者可以在同一个表中创建索引。
    (2)每个表中只能创建一个聚集索引。
    (3)每个表中最多可以创建249个非聚集索引。
    (4)在经常查询的字段上建立索引。
    (5)定义text、image和bit数据类型的列上不要创建索引。
    (6)在外键列上可以创建索引。
    (7)主键列上一定要创建索引。
    (8)在那些重复值比较多、查询较少的列上不要创建索引

  • sp_helpindex可以报告有关表或视图上索引的信息
    sp_helpindex [ @objname = ] ‘name’
    [ @objname =] 'name’表示用户定义的表或视图的限定或非限定名称

  • 修改索引名
    sp_rename [ @objname = ] ‘object_name’ ,
    [ @newname = ] ‘new_name’
    [ , [ @objtype = ] ‘object_type’ ]
    对索引进行重命名时,需要修改的索引名格式必须为“表名.索引名”

  • DROP INDEX语句可从当前数据库中删除一个或多个关系索引、空间索引、筛选索引或XML索引

  • DROP INDEX语句不能删除通过定义PRIMARY KEY或UNIQUE约束创建的索引。若要删除该约束和相应的索引,需使用带有DROP CONSTRAIN

你可能感兴趣的:(数据库,sqlserver,学习,笔记)