SQL Server索引的创建及查询

目录

一、索引

1.语法:

2.索引类型

UNIQUE 

CLUSTERED(聚集索引)

NONCLUSTERED(非聚集索引)

二、创建索引

1.创建非聚集索引

2.创建聚集索引,并为表使用由 3 个部分组成的名称

3.使用唯一约束创建非聚集索引并指定排序顺序 

 4.在线创建索引

三、索引查询

1.使用目录视图 

2.使用系统存储过程


 

一、索引

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

设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。

1.语法:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name

ON <object> ( column_name [ ASC | DESC ] [ ,...n ] )

[ WITH <backward_compatible_index_option> [ ,...n ] ]

[ ON { filegroup_name | "default" } ]

2.索引类型

UNIQUE 

唯一索引不允许两行具有相同的索引键值。 视图的聚集索引必须唯一,唯一索引中使用的列应设置为 NOT NULL,因为在创建唯一索引时,会将多个 Null 值视为重复值

CLUSTERED(聚集索引)

使用场景

  • 可用于经常使用的查询。

  • 提供高度唯一性。

  • 可用于范围查询 ,使用运算符(如 BETWEEN,、>>=、<和 <=)返回值范围。

  • 返回大型结果集。

  • 使用 JOIN 子句;一般情况下,使用该子句的是外键列。

  • 使用 ORDER BY 或 GROUP BY 子句。

NONCLUSTERED(非聚集索引)

使用场景

  • 使用 JOIN 或 GROUP BY 子句。

  • 不返回大型结果集的查询。

  • 包含经常包含在查询的搜索条件(例如返回完全匹配的 WHERE 子句)中的列。

  

*还有其他的索引类型,这里未列出

二、创建索引

1.创建非聚集索引

CREATE INDEX index1 ON schema1.table1 (column1);

2.创建聚集索引,并为表使用由 3 个部分组成的名称

CREATE CLUSTERED INDEX index1 ON database1.schema1.table1 (column1);

3.使用唯一约束创建非聚集索引并指定排序顺序 

CREATE UNIQUE INDEX index1 ON schema1.table1 (column1 DESC, column2 ASC, column3 DESC);

 4.在线创建索引

ONLINE = { ON | OFF } 

指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF

  • ON    在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。 这使得能够继续对基础表和索引进行查询或更新 。 对本地临时表创建索引时,无法将 ONLINE 设置为 ON。
  • OFF  在索引操作期间应用表锁 可以防止所有用户在操作期间访问基础表
CREATE INDEX index1 ON schema1.table1 (column1) WITH (ONLINE = ON)

耗时参考:五千多万数据的表,用在线的方式创建索引 用时11分钟左右

 

三、索引查询

索引的信息,可以使用目录视图、系统函数和系统存储过程

1.使用目录视图 

查看表所有索引

 SELECT i.name AS index_name  
    ,i.type_desc  
    ,is_unique  
    ,ds.type_desc AS filegroup_or_partition_scheme  
    ,ds.name AS filegroup_or_partition_scheme_name  
    ,ignore_dup_key  
    ,is_primary_key  
    ,is_unique_constraint  
    ,fill_factor  
    ,is_padded  
    ,is_disabled  
    ,allow_row_locks  
    ,allow_page_locks  
FROM sys.indexes AS i  
INNER JOIN sys.data_spaces AS ds ON i.data_space_id = ds.data_space_id  
WHERE is_hypothetical = 0 AND i.index_id <> 0   
AND i.object_id = OBJECT_ID('表名');  

查看指定表所有索引和索引列 

SELECT i.name AS index_name  
    ,COL_NAME(ic.object_id,ic.column_id) AS column_name  
    ,ic.index_column_id   
FROM sys.indexes AS i  
INNER JOIN sys.index_columns AS ic
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id  
WHERE i.object_id = OBJECT_ID('表名');

2.使用系统存储过程

exec sp_helpindex 表名

返回索引名称 、索引描述、索引列

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,可以使用多种方法来创建索引。以下是几种常用的方法: 1. 使用sys.indexes和sys.index_columns系统视图查询指定表的所有索引索引列。可以执行以下查询语句: SELECT i.name AS index_name, COL_NAME(ic.object_id, ic.column_id) AS column_name, ic.index_column_id FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id WHERE i.object_id = OBJECT_ID('表名'); 2. 使用系统存储过程sp_helpindex可以查看指定表的索引信息。可以执行以下命令: EXEC sp_helpindex '表名'; 3. 使用CREATE INDEX语句创建索引。可以使用INCLUDE子句定义包含的非键列,即覆盖索引。以下是CREATE INDEX语句的语法示例: CREATE \[UNIQUE\] \[CLUSTERED | NONCLUSTERED\] INDEX index_name ON <object> (column_name \[ASC | DESC\] \[, ...n\]) \[WITH <backward_compatible_index_option> \[, ...n\]\] \[ON {filegroup_name | "default"}\] 其中,<object>表示要创建索引的表或视图,column_name表示要创建索引的列名,ASC表示升序,DESC表示降序。可以使用WITH子句指定一些可选的索引选项,如PAD_INDEX、FILLFACTOR、SORT_IN_TEMPDB等。 综上所述,可以使用以上方法来创建SQL Server索引。 #### 引用[.reference_title] - *1* [SQL Server索引创建查询](https://blog.csdn.net/qq_27250279/article/details/126502889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SQL Server 创建索引(index)](https://blog.csdn.net/weixin_34318272/article/details/93826005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值