SQL Server 索引优化——重复索引(部分重复)

前文给出了查询完全重复索引方法,但更多的情况下,是多个管理员,根据单个或部分查询,创建其各自需要的索引,而没有考虑整体情形,就会出现大量的部分重复索引,这对OLAP来说没有较大的影响,但对于OLTP系统,频繁的数据变更就会造成大量的性能消耗,同时也会增加存储的压力。所以对于这部分的索引的优化也显得非常有重要。我们可以这样理解部分重复索引,即同一列(或列集,不包含聚集索引的键列)在不同索引的第一键列(第二、第三……)中重复出现,其他部分不同。部分重复索引的构成比较复杂,没有办法给出统一脚本,只能通过一个个简单的例子进行说明。

先创建测试表,脚本如下:

CREATE TABLE Member
(MemberNo INT IDENTITY,FirstName VARCHAR(30) NOT NULL,LastName VARCHAR(30) NOT NULL,RegionNo INT
);

为说明这个问题,下面考虑两个查询,并单独创建各自需要的索引。

SELECTLastName
FROM Member
WHERE FirstName='jack';
CREATE INDEX MemberIndex1
ON Member(FirstName)
INCLUDE(LastName);
GO

CREATE INDEX MemberIndex2
ON Member(FirstName)
INCLUDE(RegionNo);
GO
SELECTRegionNo
FROM Member
WHERE FirstName='jack';

可以看到MemberIndex1、MemberIndex2的键列均为FirstName,而前者的包含列为LastName,后者的包含列为RegionNo。因为包含列中的顺序不会影响查询优化器对索引的使用,所以可以这样消除重复索引,我们删除索引MemberIndex2,重建索引MemberIndex1,包含列同时包含原两个索引包含列中的LastName和RegionNo,脚本如下:

DROP INDEX Member.MemberIndex2;
CREATE INDEX MemberIndex1 ON Member(FirstName)
INCLUDE(LastName,RegionNo)
WITH (DROP_EXISTING=ON);

重建索引后,再次执行两个查询,查看它们的执行计划如下:

可以看到两个查询都使用新的索引进行索引查找。这样我们节省了一个索引维护的开销,同时减少了索引中重复字段的存储空间。

部分重复索引可能不尽相同,如有兴趣,欢迎讨论。

如果喜欢,可以搜索关注MSSQLServer公众号,将有更多精彩内容分享:

SQL Server 索引优化——重复索引(部分重复)相关推荐

  1. SQL SERVER全面优化-------索引有多重要?

    想了好久索引的重要性应该怎么写?讲原理结构?我估计大部分人不愿意看,也不愿意花那么多时间仔细研究.光写应用?感觉不明白原理一样不会用.举例说明?情况太多也写不全....到底该怎么写呢? 随便写吧,想到 ...

  2. oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍

    SQL Server和Oracle数据库索引介绍 SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行 ...

  3. SQL Server强制使用特定索引 、并行度、锁

    SQL Server强制使用特定索引 .并行度 修改或删除数据前先备份,先备份,先备份(重要事情说三遍) 很多时候你或许为了测试.或许为了规避并发给你SQL带来的一些问题,常常需要强制指定目标sql选 ...

  4. SQL SERVER全面优化-------写出好语句是习惯

    前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...

  5. SQL Server 数据库优化

    设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事. 在开发工具.数据库设计.应用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本 ...

  6. SQL Server数据库优化方案

    SQL Server数据库优化方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计 ...

  7. SQL Server 性能优化之——系统化方法提高性能

    原文 http://www.cnblogs.com/BoyceYang/archive/2013/06/15/3138142.html 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索 ...

  8. sql server 2005 优化方法

    sql server 2005 优化方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  9. SQL SERVER数据库优化相关资料

    1.SQL SERVER全面优化 转载于:https://www.cnblogs.com/ZHUYIN/p/9212985.html

  10. SQL Server性能优化与管理的艺术 附件下载地址

    首先感谢读者们对鄙人的支持,购买了<SQL Server性能优化与管理的艺术>,由于之前出版社的一些疏忽,附件没有上传成功,再次本人深表歉意. 请需要下载附件的读者从下面链接下载,谢谢: ...

最新文章

  1. applet打包的MANIFEST.MF配置
  2. SQLite中的内连接简化技巧
  3. NeHe教程Qt实现——lesson15
  4. 我的总结SVN的使用
  5. 正斜杠( / )和反斜杠( \ )的区别
  6. 计算机软考初级工程资料,计算机软考网络工程师复习资料及习题(一)
  7. HTML5促使本地应用向Web迁移
  8. eclipse 版本 查看
  9. altium09怎么查元器件_长文图解:单张表数据量太大问题怎么解决?请记住这六个字...
  10. Unity Shader 菲涅尔环境反射
  11. Outlier Detection with Isolation Forest(孤立森林异常检测)
  12. 星岚技术 Win7 x64 纯净版 V2021.4【带驱动包】
  13. 哈理工OJ 1926 函数式计算
  14. 适配器模式和代理模式的区别
  15. 上面两点下面一个三角形_三角形光栅化
  16. 罗德里格斯公式证明(Games101)
  17. B/S与C/S模式比较
  18. mbedtls 连接 阿里云物联网
  19. C站万字详解二叉树基本操作演示程序(附图)
  20. linux基础教程入门学习是系统汇总全集(附详细的图文目录学习)

热门文章

  1. Error running ‘Tomcat8.5‘ port out of range-1 (moments ago)
  2. 【VulnHub靶场】——HARRYPOTTER第一部: ARAGOG (1.0.2)
  3. 梦三国则么修改服务器时间,梦三国如何窗口,梦三国设置
  4. 没有CCTV-5也不用慌的世界杯观战指南
  5. scrapy.spiders.crawl.CrawlSpider类的使用
  6. sqlserver with 语法
  7. detach()函数理解
  8. 复合辛普森公式c语言编程,复合辛普森公式
  9. JS 转换格林尼治时间
  10. H3C网络设备模拟器显示交换机的MAC地址表