惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
N
Netflix TechBlog - Medium
罗磊的独立博客
F
Full Disclosure
I
InfoQ
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
Webroot Blog
Webroot Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
博客园 - 【当耐特】
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
T
Threat Research - Cisco Blogs
Y
Y Combinator Blog
P
Proofpoint News Feed
B
Blog RSS Feed
G
GRAHAM CLULEY
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cisco Talos Blog
Cisco Talos Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
I
Intezer
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
L
LangChain Blog
B
Blog
雷峰网
雷峰网
K
Kaspersky official blog
S
Secure Thoughts
Security Latest
Security Latest
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 哥本哈士奇(aspnetx)

医疗器械行业 Salesforce Territory 完整落地实例 Raw Data Vault vs Business Data Vault Neo4j 多跳查询实战:从社交网络场景理解图遍历 Git 本地版本管理学习笔记 看完《低智商犯罪》,学习Cypher构建知识图谱 LangChain DeepAgents 学习笔记 LangChain Deepagent 版本0.6.1中间件一个bug Neo4j笔记(五):查询的处理流程 微软 SQL Server 版本演进史:从诞生到 SQL Server 2025 提升 Text2SQL 准确率 SQLServer Management Studio(SSMS) 22 Copilot 最佳实践学习笔记 SQLServer RAG笔记4:从服务层到前端交互 SQLServer RAG笔记5:为SQLServer 2025配置Ollama SQL Server RAG 笔记3:SQLServer2025 向量数据库 详解传统RAG、Text2SQL、Graph RAG:适用场景与问题示例汇总 SQL Server RAG 笔记2:图数据库服务层与前端可视化构建 SQL Server RAG 笔记1:图数据库构建 Neo4j 笔记(四):一篇文章如何入库的 数据仓库笔记 第六篇:PSA 层 SCD2 处理方式 数据仓库笔记 第五篇:Data Mart 层(数据集市) 数据仓库笔记 第四篇:Star Schema 层(维度建模) 数据仓库笔记 第三篇:常用缓慢变化维处理方式介绍 数据仓库笔记 第二篇:PSA 层(持久化暂存区)详解 数据仓库笔记 第一篇:数据仓库的定义、历史与意义 Neo4j 笔记(三):数据建模与程序连接实战 Neo4j 基础教程(二):Cypher CRUD 完全指南 Neo4j 基础教程(一):安装与快速入门 Power BI学习笔记第20篇:面试题汇总 · 第三篇:高级应用与最佳实践篇 Power BI学习笔记第19篇:面试题汇总 · 第二篇:数据建模与 DAX 篇 Power BI学习笔记第18篇:面试题汇总 · 第一篇:基础概念篇 Power BI学习笔记第15篇:企业级报表开发与最佳实践 Power BI学习笔记第13篇:高级可视化与自定义图表 Power BI学习笔记第14篇:Power Query 高级数据处理 Power BI学习笔记第12篇:DAX 高级计算与性能优化 Power BI学习笔记第11篇:高级数据建模与关系设计 Power BI学习笔记第10篇:实战案例 — 销售数据分析仪表板 Power BI学习笔记第08篇:报表交互与筛选器 Power BI学习笔记第09篇:Power BI Service 发布与共享 Power BI学习笔记第07篇:可视化图表设计与最佳实践 Power BI学习笔记第06篇:DAX 进阶:时间智能与复杂计算 Power BI学习笔记第05篇:DAX 基础:计算列与度量值 Power BI学习笔记第04篇:数据建模与关系管理 Power BI学习笔记第03篇:Power Query 数据清洗与转换 Power BI学习笔记第02篇:数据获取与连接数据源 Power BI学习笔记第01篇:Power BI 简介与环境搭建 Power BI Dashboard 常用布局方案推荐 Power BI 示例一览 OpenClaw 核心八大 MD 文件 Microsoft Agent Framework 智能体调用工具 Microsoft Agent Framework 创建智能体 一个简单案例理解OpenClaw的做梦过程 SQLAlchemy 学习笔记 LangChain RAG索引与查询 - 学习笔记 LangChain使用deep agent并且加载SKILL 本地系统对接大模型智能体的若干尝试 财务分析报告 - 常用Power BI DAX公式详解 用SKILL实现请假流程信息收集 使用小龙虾来操作猿编程的遥控车 使用OpenClaw的Skills对接本地系统 OpenClaw必装Skill全指南 Dify Agentic RAG 笔记 # 简单的神经网络计算过程 - 正负判断 使用Gradio构建AI前端 - RAG的QA模块 使用Gradio构建AI前端 - RAG召回测试 Streamlit + LangChain 1.0 简单实现智能问答前后端 利用AI Agent,辅助销售团队制定培训和考试内容 实现AI和BI整合的初步思路和探索-Part3 实现AI和BI整合的初步思路和探索-Part2 实现AI和BI整合的初步思路和探索 以《出师表》作为例子,对比通用分块和父子分块的区别 LangChain RAG 学习笔记:从文档加载到问答服务 记录无法修改OneDrive文件的解决方法 Power BI制作指标达成跟踪器 Power BI学习笔记-周报销售数据分析
SQL Server 索引知识汇总
哥本哈士奇(aspnetx) · 2026-07-22 · via 博客园 - 哥本哈士奇(aspnetx)

SQL Server 索引知识汇总

摘要

本文对SQLServer中的索引进行一个知识总结。

一、堆表(Heap)

未创建聚集索引的表称为堆表,数据无序追加,无统一排序。

  • 优势:写入极快,适合日志、流水表等持续大批量写入场景
  • 缺点:无索引时查询必须全表扫描,数据量越大成本越高
-- 创建堆表(无聚集索引)
CREATE TABLE TestData (
    TestId integer, TestName varchar(255), TestDate date,
    TestType integer, TestData1 integer, TestData2 varchar(100),
    TestData3 XML, TestData4 varbinary(max), TestData4_FileType varchar(3)
);

ALTER TABLE TestData REBUILD;   -- 重建堆表
DROP TABLE TestData;            -- 删除表

二、聚集索引(Clustered Index)

B+树结构,索引键与完整行数据存储在叶子节点。一张表最多1个聚集索引,创建后不再为堆表。

  • 优势:WHERE条件含索引键时直接定位整行,无需回表;ORDER BY与索引键一致时省去排序开销
  • 缺点:DML维护成本高——键值更新会触发页拆分/迁移,INSERT/DELETE也有额外开销
CREATE CLUSTERED INDEX IX_TestData_TestId ON dbo.TestData (TestId);
ALTER INDEX IX_TestData_TestId ON TestData REBUILD WITH (ONLINE = ON);   -- 在线重建
DROP INDEX IX_TestData_TestId ON TestData WITH (ONLINE = ON);           -- 在线删除

三、非聚集索引(Non-Clustered Index)

B+树结构,叶子节点不存完整行,仅存行定位指针(指向聚集索引键或堆表的RID)。

  • 优势:可建多个索引适配不同查询;DML维护开销低于聚集索引
  • 缺点:增删改仍需维护所有非聚集索引;索引越多写入越慢,需权衡查询与写入性能
CREATE INDEX IX_TestData_TestDate ON dbo.TestData (TestDate);
ALTER INDEX IX_TestData_TestDate ON TestData REBUILD WITH (ONLINE = ON);
DROP INDEX IX_TestData_TestDate ON TestData;

四、列存储索引(Column Store Index)

按列存储的特殊索引,分为聚集列存储与非聚集列存储两种。

  • 优势:专为DW/大宽表/海量事实表设计,聚合分析性能提升最高100倍,高压缩算法存储占用最高减少90%
  • 缺点:不支持 varchar(max)/nvarchar(max)/XML/text/image/CLR 类型;开启复制/CDC的表无法使用;DML写入开销远高于行式索引
-- 创建聚集列存储索引
CREATE CLUSTERED COLUMNSTORE INDEX CIX_TestData_TestType ON dbo.TestData (TestType)
    WITH (DATA_COMPRESSION = COLUMNSTORE);

DROP INDEX CIX_TestData_TestType;

五、XML 索引

专用于 XML 类型字段,分为主XML索引二级XML索引(PATH/VALUE/PROPERTY),前置要求:表必须有主键聚集索引。

  • 优势:避免每次查询加载解析完整XML文档,适合大XML字段局部读取
  • 缺点:磁盘占用极高(XML每个标签生成多条索引记录);XML更新时同步维护带来写入损耗
CREATE PRIMARY XML INDEX PXML_TestData_TestData3 ON TestData (TestData3);

CREATE XML INDEX XMLPATH_TestData_TestData3 ON TestData (TestData3)
    USING XML INDEX PXML_TestData_TestData3 FOR PATH;

CREATE XML INDEX XMLPROPERTY_TestData_TestData3 ON TestData (TestData3)
    USING XML INDEX PXML_TestData_TestData3 FOR PROPERTY;

CREATE XML INDEX XMLVALUE_TestData_TestData3 ON TestData (TestData3)
    USING XML INDEX PXML_TestData_TestData3 FOR VALUE;

六、全文索引(Full-Text Index)

将文本拆分为分词(Token)构建索引,索引文件独立存放于全文目录,不混存于数据文件。

  • 优势:支持大文本/二进制字段检索(char/varchar/nvarchar/text/XML/varbinary(max)/FILESTREAM);支持精确短语、前缀模糊、变形检索、邻近词、同义词、加权权重等高级检索
  • 缺点:全文检索由独立 MSFTESQL 服务执行,会与 SQL Server 争抢内存/IO 资源
CREATE FULLTEXT CATALOG fulltextCatalog AS DEFAULT;

CREATE FULLTEXT INDEX ON dbo.TestData (TestData4 TYPE COLUMN TestData4_FileType)
    KEY INDEX PK_TestData WITH STOPLIST = SYSTEM;

ALTER FULLTEXT CATALOG fulltextCatalog REBUILD;
DROP FULLTEXT INDEX ON dbo.TestData;

七、索引衍生变体

1. 包含列索引(Included Columns)

非聚集索引扩展:将指定字段存入叶子节点,实现"类聚集索引"效果,免去回表。支持 text/ntext/image 外的绝大多数类型。

CREATE NONCLUSTERED INDEX IX_TestData_TestDate_incTestData3 ON TestData (TestDate)
    INCLUDE (TestData3);

2. 函数索引(基于计算列)

SQL Server 不直接支持函数索引,通过持久化计算列模拟实现。

ALTER TABLE TestData ADD TestDatePlus7Days AS DATEADD(DAY, 7, TestDate) PERSISTED;
CREATE NONCLUSTERED INDEX IX_TestData_TestDate_Plus7Days ON TestData (TestDatePlus7Days);

3. 筛选索引(Filtered Index)

带 WHERE 条件的非聚集索引,缩小索引体积、降低维护成本。仅当查询条件与索引 WHERE 完全匹配时优化器才会选用。

CREATE INDEX IX_TestData_TestDate_TestTypeEq1 ON TestData (TestDate) WHERE TestType = 1;

4. 覆盖索引(Covering Index)

设计思路:查询所有字段要么是索引键,要么在 INCLUDE 中,完全消除回表,性能最优。

CREATE INDEX IX_TestData_TestDate_TestType_AllData ON TestData (TestDate, TestType)
    INCLUDE (TestData1, TestData2, TestData3, TestData4);

-- 该查询完全走索引,无需访问原表
SELECT TestData1, TestData2, TestData3, TestData4
FROM TestData
WHERE TestDate > CURRENT_TIMESTAMP - 1 AND TestType = 1;