Sql Server索引

1.创建索引时遵循一般原则
  在需要经常搜索的列上面创建索引
  在主键上创建索引
  在外键上创建索引
  在经常用于Where子句的列上创建索引
  在经常需要排序的列上创建索引
  对于数据类型为text,image,bit的列不应该增加索引
  当需要Update性能远高于Select性能时不应该增加索引
2.索引分类
聚集索引:物理存储“按照”索引排序;每个表“只能有一个”聚集索引;
非聚集索引:物理存储“不按照”索引排序,每个表可以有“多个”非聚集索引;
唯一索引:要求创建索引的关键字段值在表中不能有重复值;
主键索引:为表定义一个主键将自动创建一个主键索引;(主键索引是唯一索引的特殊类型)
复合索引:对表创建的索引是基于过个字段对表中的记录排序的;
FILLFACTOR(填充因子):0~100范围内的值,指示索引页填满的空间所占的百分比。(一般很少指定)
3.创建索引3种方法
(1)用企业管理器创建索引;
(2)利用Transact-SQL语句创建索引;
(3)利用索引优化向导创建索引;
第一种:用企业管理器创建索引(略)
第二种:利用Transact-SQL语句创建索引
语法:
CREATE [索引类型] INDEX 索引名称
ON 表名(列名)
WITH FILLFACTOR = 填充因子值0~100
GO
/*实例*/
USE 库名
GO
IF EXISTS (SELECT * FROM SYSINDEXES WHERE NAME='IX_TEST_TNAME')--检测是否已经存在IX_TEST_TNAME索引
DROP INDEX TEST.IX_TEST_TNAME--如果存在则删除
--创建索引
CREATE NONCLUSTERED INDEX IX_TEST_TNAME --创建一个非聚集索引
ON TEST(TNAME)  --为TEST表的TNAME字段创建索引
WITH FILLFACTOR = 30 --填充因子为30%
GO
SELECT * FROM TEST(INDEX = IX_TEST_TNAME) WHERE TNAME = 'A' --指定按‘IX_TEST_TNAME’索引查询
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
其语法形式如下:
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]

INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )

[with

[PAD_INDEX]

[[,]FILLFACTOR=fillfactor][[,]IGNORE_DUP_KEY]

[[,]DROP_EXISTING]

      [[,]STATISTICS_NORECOMPUTE]

[[,]SORT_IN_TEMPDB]

]

[ ON filegroup ]

CREATE INDEX命令创建索引各参数说明如下:
UNIQUE:用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。
CLUSTERED:用于指定创建的索引为聚集索引。
NONCLUSTERED:用于指定创建的索引为非聚集索引。
index_name:用于指定所创建的索引的名称。
table:用于指定创建索引的表的名称。
view:用于指定创建索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
Column:用于指定被索引的列。
PAD_INDEX:用于指定索引中间级中每个页(节点)上保持开放的空间。
FILLFACTOR = fillfactor:用于指定在创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor的值为1到100。
IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集索引中的列中插入重复数据时SQL Server所作的反应。
DROP_EXISTING:用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。
STATISTICS_NORECOMPUTE:用于指定过期的索引统计不会自动重新计算。
SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中。
ON filegroup:用于指定存放索引的文件组。

例子1:为表employees创建了一个唯一聚集索引,其程序清单如下:

CREATE UNIQUE CLUSTERED INDEX number_ind

   ON employees (number)

with

   pad_index,

   fillfactor=20,

   ignore_dup_key,

   drop_existing,

   statistics_norecompute

例子2:为表employees创建了一个复合索引,其程序清单如下:

create index employees_cpl_ind

on employees(name,age)

with

   pad_index,

   fillfactor=50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值