详细分析Sql Server索引的创建、查询、删除等基本知识(附Demo)

news2025/1/12 0:59:35

目录

  • 前言
  • 1. 基本知识
  • 2. 索引
    • 2.1 创建
    • 2.2 删除
    • 2.3 查询
  • 3. 总结

前言

原先分析过Sql的基本知识,感兴趣也可阅读:

  1. Mysql的两种存储引擎详细分析及区别(全)
  2. Mysql优化高级篇(全)

1. 基本知识

索引是在数据库表上创建的数据结构,用于提高查询效率

SQL Server 支持几种类型的索引,主要包括:

  • 聚集索引(Clustered Index):数据表的实际数据按照索引顺序排列
    一个表只能有一个聚集索引,因为数据行的存储顺序只能有一种
    通常在主键列上创建
  • 非聚集索引(Non-Clustered Index):创建一个单独的索引结构,指向表中的数据行
    可以有多个非聚集索引

索引的主要作用是加速查询速度,但过多的索引可能会影响数据的插入、更新和删除操作的性能

2. 索引

2.1 创建

创建索引可以使用 CREATE INDEX 语句

以下是基于 [manong].[dbo].[yanjiuseng] 表的示例:

创建聚集索引(假设以 id 列为主键):

CREATE CLUSTERED INDEX IX_yanjiuseng_id
ON [manong].[dbo].[yanjiuseng] (id);

创建非聚集索引(假设以 name 列为索引):

CREATE NONCLUSTERED INDEX IX_yanjiuseng_name
ON [manong].[dbo].[yanjiuseng] (name);

创建复合索引(假设在 name 和 age 列上创建):

CREATE NONCLUSTERED INDEX IX_yanjiuseng_name_age
ON [manong].[dbo].[yanjiuseng] (name, age);

2.2 删除

删除索引可以使用 DROP INDEX 语句:

删除非聚集索引:

DROP INDEX [manong].[dbo].[yanjiuseng].IX_yanjiuseng_name;

删除聚集索引(聚集索引通常在删除表时会自动删除,无需单独删除,但可以通过以下语句删除):

DROP INDEX [manong].[dbo].[yanjiuseng].IX_yanjiuseng_id;

2.3 查询

单独查询表的索引信息:EXEC sp_helpindex '[manong].[dbo].[yanjiuseng]';

在这里插入图片描述

从表中也可得知为非聚集联合索引

如果想要查询是什么索引以及排的位置,可以使用如下方式:

SELECT 
    i.name AS IndexName,
    i.type_desc AS IndexType,
    ic.column_id AS ColumnID,
    c.name AS ColumnName
FROM 
    sys.indexes i
INNER JOIN 
    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE 
    i.object_id = OBJECT_ID('[manong].[dbo].[yanjiuseng]');

截图如下:

在这里插入图片描述

查询指定索引所包含的列也可知道为联合索引

SELECT 
    i.name AS IndexName,
    c.name AS ColumnName,
    ic.index_column_id AS ColumnID
FROM 
    sys.indexes i
INNER JOIN 
    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE 
    i.object_id = OBJECT_ID('[manong].[dbo].[yanjiuseng]')
    AND i.name = 'END_TIME_INDEX'
ORDER BY 
    ic.index_column_id;

如果结果返回一个列,则为单列索引

IndexName       | ColumnName | ColumnID
----------------|------------|----------
END_TIME_INDEX  | endTime    | 1

如果结果返回多个列,则为复合索引

IndexName       | ColumnName | ColumnID
----------------|------------|----------
END_TIME_INDEX  | endTime    | 1
END_TIME_INDEX  | status     | 2

再次展示另外一个表的聚集联合索引

在这里插入图片描述

3. 总结

  • 索引的选择:选择适合的索引类型和列是关键
    频繁用于查询的列应建立索引,而频繁更新的列应谨慎建立索引
  • 索引的维护:索引可能会随数据的增加而变得不再高效,定期对索引进行重建或重组可以保持其性能
  • 性能考量:虽然索引提高了查询性能,但它们也会增加存储空间需求和数据操作的开销
    过多的索引会导致性能下降,因此应根据实际需求选择合适的索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读-《Distant Supervision for Relation Extraction beyond the Sentence Boundary》

文章提出了首个将远程监督应用于跨句子关系提取的方法,通过整合句内和句间关系,利用图表示和多路径特征提取提高了准确性和鲁棒性。 摘要 文章提出了一种新的方法,用于在远程监督下进行跨句子的关系抽取。这种方法利用图表示来整合依赖和话…

滤芯材料做CE认证,按照什么EN标准测试?

要对滤芯材料进行CE认证,您需要遵循欧洲联盟的相关法规和标准。滤芯材料通常与产品安全性、电磁兼容性和环保性有关。以下是可能适用于滤芯材料的一些标准、要求和指令: 低电压指令(Low Voltage Directive,LVD):滤芯材料通常包含电…

Vue3自研开源Tree组件:人性化的拖拽API设计

针对Element Plus Tree组件拖拽功能API用的麻烦,小卷开发了一个API使用简单的JuanTree组件。拖拽功能用起来非常简单! 文章目录 使用示例allowDragallowDrop支持节点勾选支持dirty检测后台API交互 源码实现 使用示例 组件的使用很简单: 通过…

Kubernetes—二进制部署k8s集群搭建单机matser和etcd集群(1)

目录 组件部署 一、操作系统初始化配置 二、升级Liunx内核 三、部署docker引擎 四、部署etcd集群 1.在 master01 节点上操作 2.在 node节点上操作 检查etcd群集状态 增删查键 备份还原 etcd(拓展) 五.部署 Master 组件 1.上传解压 2.创建…

git查看记录详解

文章目录 git查看记录查看文件修改列表查看修改差异友好的查看修改记录结合多个选项查看记录示例输出 git查看记录 使用 git log 你不仅可以查看提交记录,还可以通过一些选项查看文件的修改列表、修改差异,并以更友好的方式查看修改记录。以下是一些常用…

ROS2入门到精通—— 2-14 ROS2实战:远程可视化实车上的文件

0 前言 ROS车的外接屏幕很小,在上面鼠标操作和键盘操作都比较麻烦,想要远程可视化ROS车上的文件,可以在本文学到一些用到实际工作中 1 ssh 终端操作远程桌面 ssh -Y pi192.168.33.200输入密码登陆,这样还是不能可视化文件&…

CS224W—02 Node Embeddings

CS224W—02 Node Embeddings Node Embeddings概念 传统的图机器学习: 给定一个输入图,抽取节点、边和图级别特征, 学习一个能将这些特征映射到标签的模型(像SVM, NN…)这个抽取不同级别特征的过程,就是特征工程feature enginee…

华为NetEngine AR1000V虚拟路由器 nfv

华为NetEngine AR1000V虚拟路由器 华为NetEngine AR1000V虚拟路由器彩页 - 华为企业业务 华为NetEngine AR1000V虚拟路由器 NetEngine AR1000V是华为公司在传统企业网络向SD-WAN转型的趋势下推出的虚拟路由器。 AR1000V基于NFV技术,可以部署在X86硬件平台的服务…

我出一道面试题,看看你能拿 3k 还是 30k!

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…

HarmonyOs~ArkUI进阶 之 状态管理

合理选择装饰器 最小化状态共享范围 在没有强烈的业务需求下,尽可能按照状态需要共享的最小范围选择合适的装饰器。 应用开发过程中,按照组件颗粒度,状态一般分为组件内独享的状态和组件间需要共享的状态 组件间需要共享的状态 组件间需…

细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法

目录 一、参考硬件 二、 建立新工程 1.配置DAC1 2.配置DAC1的DMA 3.配置DAC2 4.配置DAC2的DMA 5.配置定时器 6.配置时钟和Debug 三、修改代码 四、 查看结果 一、参考硬件 本项目依赖的软件和硬件工程参考本文作者写的文章: 细说MCU的DAC1实现…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑧ | 11.21 - 11.22

前言 第11章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.21 实施定量风险分析 11.21.1 主要输入 11.21.2 主要工具与技术 11.21.3 主要输出 11.22 规划风险应对 …

UPLOAD-LABS靶场[超详细通关教程,通关攻略]

---------------------------------------- 靶场环境: 下载链接: https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 ------------------------------------…

【JavaEE】HTTP(3)

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 1.HTTP响应1.2状态码 2.HTTPS协议2.1概念2.2引入对称加密2.2.1概念2.2.2图解…

Ribbon-微服务注册中心(Ribbon概述 基于Ribbon实现订单调⽤商品服务 服务调⽤Ribbon⾼级 )

目录 一、Ribbon概述 1. 什么是Ribbon 2. Ribbon的主要作⽤ 二、基于Ribbon实现订单调⽤商品服务 1. 坐标依赖 2. ⼯程改造 三、服务调⽤Ribbon⾼级 1. 负载均衡概述 2. 客户端负载均衡与服务端负载均衡 3. 基于Ribbon实现负载均衡 3.1 搭建多服务实例 3.2 负载均衡…

完蛋!我把AI喂吐了!

当我们用 [RAG] 构建一个知识库问答应用的时候,总是希望知识库里面灌的数据越多,问答的效果越好,事实真是如此吗?这篇文章给大家答案。 引言 在人工智能问答系统的发展中,RAG(Retrieval-Augmented Generat…

努比亚开局连发两款旗舰机,其中一款还能卫星通话?

在智能手机市场竞争日益激烈的当下,努比亚作为国内知名手机品牌,始终致力于为消费者带来兼具创新性和实用性的产品。 近日,努比亚正式发布了两款备受瞩目的旗舰手机——努比亚Z60 Ultra领先版和努比亚Z60S Pro。两款手机不仅在硬件配置上实现…

Macbook Pro升级macOS 10.15及以上的全过程

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言升级步骤选择指定macOS版本并下载安装升级macOS安装过程安装完成 前言 由于现在更多软件安装所需系统要求10.15及以上,导致很多app应用不能使用,如edge mac的操作系统要求…

LlamaIndex vs LangChain: 理解关键差异

LLM(大型语言模型)已成为各行各业不可或缺的工具,用于生成类人文本、翻译语言和回答问题等任务。有时,LLM的响应令人惊叹,因为它们比人类更迅速、更准确。这表明了它们对当今技术格局的重大影响。 今天让我们聊聊 Llam…

i2c中结构体 数据传输 i2c Tools使用

I2C中重要结构体 在I2C(Inter-Integrated Circuit)通信中,涉及的主要结构体通常用于描述设备、消息和传输的配置。以下是一些常见的I2C结构体及其作用: i2c_adapter: 这是一个代表I2C总线适配器的结构体。它包含与该I2C总线相关的…