当前位置: 首页 > news >正文

SqlServer添加索引

1. 聚集索引(Clustered Index)

  • 描述:表数据按照索引顺序实际存储。
  • 适用场景:数据经常需要排序或范围查询,比如按日期排序的查询。
  • 优点
    • 提高排序和范围查询性能。
    • 一个表只能有一个聚集索引,但可以在多列上创建(复合索引)。
  • 缺点
    • 更新、插入和删除操作可能较慢,因为需要维护数据排序。

2. 非聚集索引(Non-Clustered Index)

  • 描述:存储在单独的结构中,包含指向数据行的指针。
  • 适用场景:查找特定值或少量结果的查询,如基于唯一键或外键的查询。
  • 优点
    • 可以有多个非聚集索引,提高查找特定数据的速度。
  • 缺点
    • 可能占用更多存储空间。
    • 复杂的查询可能需要访问索引和数据两次(索引查找和行查找)。

3. 唯一索引(Unique Index)

  • 描述:确保索引列中的值是唯一的,可以是聚集索引或非聚集索引。
  • 适用场景:需要确保数据唯一性的场景,如用户ID、身份证号等。
  • 优点
    • 保证数据唯一性。
    • 提高查询性能(同非聚集索引)。
  • 缺点
    • 插入和更新操作需要检查唯一性,可能稍慢。

4. 筛选索引(Filtered Index)

  • 描述:非聚集索引的一种,仅包含满足特定条件的行。
  • 适用场景:查询某些条件下的数据,如仅索引活跃用户。
  • 优点
    • 索引更小,查询更快。
    • 减少索引维护开销。
  • 缺点
    • 只适用于特定条件下的查询,不适用于全表扫描。

5. 全文索引(Full-Text Index)

  • 描述:用于大文本字段的全文搜索。
  • 适用场景:需要对大文本字段进行复杂搜索的场景,如博客搜索。
  • 优点
    • 提供高效的全文检索能力。
    • 支持自然语言查询。
  • 缺点
    • 占用较多存储空间。
    • 建立和维护成本较高。

6. 列存储索引(Columnstore Index)

  • 描述:适用于数据仓库,通过按列存储数据来提高压缩率和查询性能。
  • 适用场景:适用于数据仓库和分析场景,尤其是大规模数据处理。
  • 优点
    • 高压缩率。
    • 快速的聚合查询性能。
  • 缺点
    • 不适合频繁的DML操作(插入、更新、删除)。

总结

  1. 频繁排序或范围查询:选择聚集索引。
  2. 查找特定值的查询:选择非聚集索引。
  3. 确保唯一性和加速查找:选择唯一索引。
  4. 特定条件下的查询:选择筛选索引。
  5. 全文搜索:选择全文索引。
  6. 大规模数据分析:选择列存储索引。

如何使用:

唯一索引

CREATE UNIQUE NONCLUSTERED INDEX UQ_UserId ON  YX_USERS (UserId);

相关文章:

  • springboot优雅shutdown时如何保障异步线程的安全
  • 黑龙江等保测评与企业安全:携手共筑数字时代坚固防线
  • 一篇文章了解常用排序算法
  • MySQl基础入门⑯【操作视图】完结
  • STM32硬件接口I2C应用(基于HMC5883L)
  • Matlab使用Simulink仿真实现AM和BPSK信号的解调
  • 玄机——第二章 日志分析-apache日志分析 wp
  • 科研辅助工具
  • C# 下载文件2
  • 【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?
  • FastAdmin后台开发框架 lang 任意文件读取漏洞复现
  • 如何衡量llm 数据集的多样性
  • Eigne库安装及使用教程
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列
  • 证明 几何分布 的期望和方差
  • IP路由与转发
  • JavaScript创建对象的四种方式
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP的Ev教程三(Periodic watcher)
  • PHP的类修饰符与访问修饰符
  • Spark RDD学习: aggregate函数
  • SQLServer之索引简介
  • 彻底搞懂浏览器Event-loop
  • 基于HAProxy的高性能缓存服务器nuster
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 力扣(LeetCode)357
  • 那些被忽略的 JavaScript 数组方法细节
  • 你不可错过的前端面试题(一)
  • 区块链分支循环
  • 软件开发学习的5大技巧,你知道吗?
  • 深度解析利用ES6进行Promise封装总结
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 整理一些计算机基础知识!
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • (12)目标检测_SSD基于pytorch搭建代码
  • (26)4.7 字符函数和字符串函数
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (HAL库版)freeRTOS移植STMF103
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (接口封装)
  • (转) 深度模型优化性能 调参
  • (转)LINQ之路
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET处理HTTP请求
  • .net网站发布-允许更新此预编译站点
  • .pyc文件是什么?
  • ::前边啥也没有
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [20161101]rman备份与数据文件变化7.txt
  • [2669]2-2 Time类的定义