T-SQL学习之索引

本文介绍了数据库索引的概念和作用,包括聚集索引和非聚集索引的分类。通过T-SQL语句展示了如何创建、查看、修改和删除索引,强调了实践操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               吐舌头最近比较忙,今天终于挤出了时间来温习 数据库之索引。

-------------------概述

             数据库中的索引与书中的目录一样,可以快速找到表中的特定行。索引是与表关联的存储在磁盘上的单独结构,它包含由表中的一列或多列生成的键,以及映射到指定表行的存储位置的指针,这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
 建立索引的作用如下:
        ● 提高查询速度。
        ● 保证数据记录的唯一性。
        ● 查询优化依靠索引起作用。
        ● 提高ORDER BY、GROUP BY执行速度。

 --------------------索引的分类

       1,聚集索引

         在聚集索引中,索引的顺序决定数据表中记录行的顺序,由于数据表中记录行经过排序,所以每个表只能有一个聚集索引。
         表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。

       2,非聚集索引

           在非聚集索引中,索引的结构完全独立于数据行的结构,数据表中记录行的顺序和索引的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序,用于在表中快速定位数据行。一个表可以有多个非聚集索引。

------------------------索引的创建

         这里不是图形化操作创建索引的介绍。

        使用T-SQL中的CREATE INDEX 语句为表创建索引,其语法格式如下:

CREATE [ UNIQUE ]    / *指定索引是否唯一*/
[ CLUSTERED | NONCLUSTERED ]    /*索引的组织方式*/
INDEX index_name   /*索引名称*/
ON {[ database_name. [ schema_name ] . | schema_name. ] table_or_view_name}( column [ ASC | DESC ] [ ,...n ] )  /*索引定义的依据*/
[ INCLUDE ( column_name [ ,...n ] ) ]				
[ WITH ( <relational_index_option> [ ,...n ] ) ] /*索引选项*/
[ ON {   partition_scheme_name ( column_name )                /*指定分区方案*/
| filegroup_name 			   /*指定索引文件所在的文件组*/
| default}]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]        /*指定FILESTREAM数据的位置*/[ ; ]
         参数说明:

UNIQUE:表示表或视图创建唯一性索引。
 CLUSTERED | NONCLUSTERED:指定聚集索引还是非聚集索引。 index_name:指定索引名称。 column:指定索引列。
 ASC | DESC:指定升序还是降序。
 INCLUDE子句:指定要添加到非聚集索引的叶级别的非键列。
 WITH子句:指定定义的索引选项。
 ON partition_scheme_name:指定分区方案
 ON filegroup_name:为指定文件组创建指定索引
 ON default:为默认文件组创建指定索引
      使用示例

      例如:在stsc数据库中score表的grade列上,创建一个非聚集索引idx_grade。 

USE stsc
CREATE INDEX idx_grade ON score(grade)

      例如:在stsc数据库中score表的sno列和cno列,创建一个唯一聚集索引idx_sno_cno。

USE stsc
 CREATE UNIQUE CLUSTERED INDEX idx_sno_cno ON score(stno,cno)
      说明:如果在创建唯一聚集索引的 idx_sno_cno前已经 创建了主键索引,则创建索引idx_sno_cno失败,可在创建新聚集索引的前删除现有的聚集索引。

-----------------索引的查看

     查看索引信息使用系统存储过程 sp_helpindex,其语法格式如下:

sp_helpindex [ @objname = ] 'name' 
     其中,'name'为需要查看的索引的表
    使用示例

   例如:使用系统存储过程sp_helpindex 查看 student表上创建的索引

USE stsc
GO
EXEC sp_helpindex student
GO
   执行结果:


-----------------------------索引的修改

      修改索引信息使用ALTER INDEX 语句,其语法格式如下:

ALTER INDEX { index_name | ALL }
     ON <object>
        { REBUILD 
               [ [PARTITION = ALL] 
                      [ WITH rebuild_index_option> [ ,...n ] ) ]}
                             …
        }                                
      说明:

 ●  REBUILD:重建索引。
 ●  rebuild_index_option:重建索引选项。
     使用示例

     例如:修改创建的索引idx_grade,将填充因子改为80。

USE stsc  ALTER INDEX idx_grade  ON score 
     REBUILD 
          WITH (PAD_INDEX=ON, FILLFACTOR=80)
GO <span style="font-family:Microsoft YaHei;font-size:12px;color:#3333ff;"><strong>
</strong></span>

--------------------索引的删除

        使用T-SQL语句中的 DROP INDEX 语句删除索引,其语法格式如下:

DROP INDEX
{ index_name ON  table_or_view_name [ ,...n ] 
  | table_or_view_name.index_name [ ,...n ]
}
     使用示例

     例如:删除已经创建的索引idx_grade

USE stsc
 DROP INDEX score.idx_grade
    
 ---------------------------------------  废     话 ?-------------------------------

    其实,明白知识点很简单,重要是怎么将自己明白的与动手结合起来,个人觉得这个关键呢。提醒自己:下来一定要 多去sql server management studio  练手,不练,这些都是瞎扯。大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值