简述:聚集索引和非聚集索引的区别
聚集索引:一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
CREATE CLUSTERED INDEX CLUSTER_ID ON TABLE_NAME(ID)
非聚集索引:一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
CREATE NONCLUSTERED INDEX NONCLUSTER_ID ON TABLE_NAME(ID)
拿新华字典查字打比方。聚集索引,相当于按拼音检索,而非聚集索引相当于按部首检索。按拼音检索说明这个字你已认识,直接到指定的位置即可查到,不需要全文检索。按部首检索说明你对这个字不认识,需要根据他的偏旁部首进行全文检索才可查到。
SqlServer默认是在主键上建立聚集索引的。有的人把表步长为1自动增大的ID列作为主键被默认了聚集索引,但是这么做意义是不大的。聚集索引最大的好处是可根据查询要求,迅速缩小查询范围,避免了全表扫描,很难在实践中用ID作为查询条件来进行查询,这就使得ID号为主键做聚集索引,成为了一种资源的浪费!要知道一张表是只能建立一个聚集索引规则的,这使得它变得非常珍贵。同样的字段上加聚集索引和非聚集索引,查询的速度可是天壤之别的,并非在任何字段上简单的建立索引就能提高查询速度。建立适当的聚集索引对于我们提高查询速度是极其重要的。
【索引相关知识】
1.聚集索引字段的字节数越小,索引的速度就会越快。
2.聚集索引很宝贵一个表只能建一个,聚集索引很重要会影响到与之关联的非聚集索引。
3.在创建索引时,可以为这个索引指定一个填充因子,以便在索引的每个叶级页面上保留一定百分比的空间,将来数据可以进行扩充和减少页分裂。填充因子是从0到100的百分比数值,设为100时表示将数据页填满,只有当不会对数据进行更改时(例如只读表中)才用此设置。值越小则数据页上的空闲空间越大,这样可以减少在索引增长过程中进行页分裂的需要,但这一操作需要占用更多的硬盘空间。当填充因子的值为50时,数据库的读取性能会降低两倍。
4.填充因子(FillFactor):指定SqlServer存储索引数据时每个索引的充满程度。用户指定的fillfactor取值范围从1到100.住过没有指定fillfactor,则默认为0。
优点:减少了页面分裂的次数。
缺点:增大了使用的存储空间。
5.重建索引:可减少请求数据所需的页数来提高性能。
(1)在执行INSERT、UPDATE、DELETE语句之后,会使得索引数据散乱在数据库存储空间内。
(2)重建索引以优化索引结构
(3)DBCCDBREINDEX(表名,索引名,填充因子)
(4)注:可减少请求数据所需的页数来提高性能
dbcc dbreindex(表名、索引名、填充因子)
bdcc dbreindex(tb)
dbcc showconfig(tb):查看索引分页情况
6.在查询中强制使用索引,select * from tb with(index=tb_index) where datetime='2017-03-10'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构