(三)结合实际,谈索引使用的误区
理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。
1、主键就是聚集索引
这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。
通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。
显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。
从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会负作用,但对于查询速度并没有影响。
在办公自动化系统中,无论是系统首页显示的需要用户签收的文件、会议还是用户进行文件查询等任何情况下进行数据查询都离不开字段的是“日期”还有用户本身的“用户名”。
通常,办公自动化的首页会显示每个用户尚未签收的文件或会议。虽然我们的where语句可以仅仅限制当前用户尚未签收的情况,但如果您的系统已建立了很长时间,并且数据量很大,那么,每次每个用户打开首页的时候都进行一次全表扫描,这样做意义是不大的,绝大多数的用户1个月前的文件都已经浏览过了,这样做只能徒增数据库的开销而已。事实上,我们完全可以让用户打开系统首页时,数据库仅仅查询这个用户近3个月来未阅览的文件,通过“日期”这个字段来限制表扫描,提高查询速度。如果您的办公自动化系统已经建立的2年,那么您的首页显示速度理论上将是原来速度8倍,甚至更快。
在这里之所以提到“理论上”三字,是因为如果您的聚集索引还是盲目地建在ID这个主键上时,您的查询速度是没有这么高的,即使您在“日期”这个字段上建立的索引(非聚合索引)。下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条):
(1)仅在主键上建立聚集索引,并且不划分时间段:
Select gid,fariqi,neibuyonghu,title from tgongwen
用时:128470毫秒(即:128秒)
(2)在主键上建立聚集索引,在fariq上建立非聚集索引:
select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:53763毫秒(54秒)
(3)将聚合索引建立在日期列(fariqi)上:
select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用时:2423毫秒(2秒)
虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第1、2种情况,在网页上的表现就是超时,根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。
得出以上速度的方法是:在各个select语句前加:
declare @d datetime
set @d=getdate()
并在select语句后加:
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
分享到:
相关推荐
【SQL优化-索引】是数据库管理中至关重要的一个环节,尤其在Microsoft SQL Server中,索引分为聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)两种类型。 聚集索引,就像汉语字典的正文,按照特定...
SQL优化中的索引是提升数据库查询性能的关键技术。索引可以理解为数据库中的一种特殊目录,帮助快速定位和访问数据。SQL Server提供了两种主要类型的索引:聚集索引(Clustered Index)和非聚集索引(Nonclustered ...
然而,在实际应用中,有些常见的索引使用误区需要注意。例如,认为主键就是聚集索引是一种误解。虽然SQL SERVER默认在主键上创建聚集索引,但这并不总是最优选择。若主键是自增ID,并且在查询中很少用到,那么将主键...
在SQL优化中,索引是提高数据库查询性能的关键技术之一。索引分为聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)。理解这两种索引的区别对于优化数据库设计至关重要。 聚集索引,顾名思义,是指表...
- **常见误区**:纠正读者在SQL优化过程中可能存在的错误观念。 - **颠覆传统观点**:挑战一些传统的优化方法,提出新的思考方向。 - **真诚交流**:作者通过提供额外的学习资源等方式,鼓励读者进行深入思考,并...
第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报表的获取 5 1.2.2 五大报表关注的要点 10 ...
"SQL Server 索引结构及其使用(聚集索引与非聚集索引)" 数据库索引是数据库性能优化的关键技术之一。SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍...
因此,在进行SQL优化时,应该结合实际需求和数据库系统的特性来做出决策。同时,随着技术的发展,不断地学习和更新知识也是至关重要的。通过上述案例的学习,我们不仅能够避免陷入常见的误区,还能够在实践中不断...
三、结合实际,谈索引使用的误区 理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。 1. 主键就是聚集索引 这种想法笔者...
标题中提到的“SQL Server索引使用的几个误区.pdf”指明了文档的主题是关于SQL Server数据库中索引的使用,同时强调了一些常见错误和误解。这部分内容通常会涉及索引在数据库中的作用、种类以及如何正确使用索引来...
非聚集索引相对于聚集索引而言,在某些情况下可能查询速度稍慢,因为查询操作通常分为两步:第一步是在索引页中查找,第二步是根据索引页中提供的指针到实际数据页中检索数据。但是,非聚集索引的一个优点是可以包含...
第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报告的获取 5 1.2.2 五大报告关注的要点 10 ...
在SQL Server中,索引是一种关键的性能优化工具,它能加速数据的查找和排序,类似于书籍的目录。根据描述,SQL Server提供了两种主要类型的索引:聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)。 ...
2. **常见误区**:比如过度依赖全表扫描,忽视索引使用,或者不恰当的数据类型选择等,这些都是在优化过程中需要避免的问题。 接下来,我们关注“基于案例学SQL优化第1周脚本”这部分内容,可能包含: 1. **查询...
本文将针对常见的几个索引误区进行详细解析。 误区1:建立了索引,查询时就一定会生效。实际上,SQL Server查询优化器会选择开销最小的执行计划,这取决于索引列的统计信息。例如,如果一个非聚集索引列有大量重复...
#### 三、结合实际,谈索引使用的误区 理论知识虽重要,但实践中常常出现一些误区: 1. **主键即聚集索引的误区**:虽然SQL Server默认在主键上创建聚集索引,但这不意味着这是最佳实践。尤其是当主键是自增ID时,...