SQL之索引

今天简单梳理下,SQL中索引。

【what & why?】

索引是存储引擎用于快速找到记录的一种数据结构.

恰当使用索引,对查询性能优化是最有效的手段,可以轻易将查询性能提高几个数量级。

 

【创建索引】

一、聚集索引

create clustered index index_name on table_name (column_name)  (主键就是一种聚集索引,一张表至多有一个聚集索引。适用于难重复少修改的,如:身份证号)

二、非聚集索引

create nonclustered index index_name on table_name (column_name)    (经常用于搜索的字段集,可以创建非聚集索引)

  • 普通索引

create index index_name on table_name (column_name)       (如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开)

  • 唯一索引

create unique index index_name on table_name (column_name)  (唯一索引这样创建默认是非聚集的,当然你也可以指定成聚集索引来创建:unique clustered index)

 

【索引属性】

1.创建索引字段的时候,你会看到字段后面紧跟着排序:asc/desc,啥意思?

答:如果你单独查询某个索引字段,那么出来的结果则会默认按照此排序规则进行排序;若查询中含有其他字段,则排序不起效。

2.创建索引后面会紧跟with,里面都有些配置项及含义?

pad_index={ on | off }  ----  是否索引填充
若开启则可以设置填充因子,如:fillfactor=30,我们可以根据读写比例来灵活调整,以便更大的发挥出索引的特性。极少update:fillfactor=100;高频update:50-70;读写各一半:80-90.

statistics_norecompute={ on | off } ---- 是否重新计算统计信息

sort_in_tempdb={ on | off } ---- 是否将排序结果存储在 tempdb 中

ignore_dup_key={ on | off } --- 是否忽视插入重复键在唯一索引中
打开:出现警告消息;关闭:出现错误消息,回滚整个INSERT操作。

drop_existing={ on | off } ---- 是否删除已存在的创建一个新的
online={ on | off } ---- 索引被操作时是否支持读写
on:可读写。索引操作期间不长期锁表,仅主要阶段使用意向共享锁。
off:只读不写。索引操作期间锁表。

allow_row_locks={ on | off } ---- 是否允许行锁
allow_page_locks={ on | off } ---- 是否允许使用页锁

 

【删除索引】

drop index index_name  on table_name

#真实注意:打算删除索引再创建新索引时,请先创建,创建完后外删除旧索引,否则搜索消耗一下子容易上去!#

 

【如何看语句执行时间】

set statistics time on
go
--执行语句
set statistics time off

4



微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

SQL之索引
嘿!有什么能帮到您的吗?
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close