`

SQL SERVER索引优化系列之二:索引性能考虑

阅读更多

在前面说过了索引能极大的提高数据的检索速度,那为什么不在每一个列上建索引呢?初学者可能会困惑这个问题,而且通常不知道哪些列该建索引,哪些不 该建, 甚至于会把like模糊查询的列也作为索引列,其实绝大多数情况下,like是不使用索引的,只有等于,大于,IN等操作符会使用索引。 SQLSERVER对于数据的插入,更新和删除,都要更新相应的索引。这无疑会大大增加更新时间。另外,如果某个数据页已满,这时如果要在该页插入数据 时,就会造成页分裂产生碎片(后面还会说到),而影响性能。所以仅当查询的性能比更新的性能更重要时才建索引。

考虑建索引的列

1. 主键
2. 外键
3. 频繁检索的列和按排序顺序频繁检索的列

通常where 后面的条件引用的列都是考虑建索引的列,模糊查询除外(如like查询)
不考虑建索引的列

1.很少或从来不在查询中引用的列
2.只有两个或若干个值的列(比如只有男和女两个值的列)
3.小表(行数很少的表,这时候SQL SERVER花费在索引上的时间比直接扫描表的时间还更长)

SQL SERVER对于建立索引的列,都要付出一定的代价来维护这个索引。另外SQLSERVER会自动分析是否使用该列的索引,比如对于只有男和女两个值的 列,如果给它建立索引,SQLSERVER自行分析后,会认为改列使用索引查找的效率不大,因为返回结果集的百分比比较大,于是SQLSERVER会将统 计数据记录下来,当下次查找该列时,就会根据该统计数据来决定是否要使用改列的索引。

对于返回结果集百分比比较大的列(比如有100万的数据,而查找的结果将返回50万),SQLSERVER就可能不会使用该列上的索引,而采用全表 扫描的方法。可自行测试,插入2000条数据,有1999条数据是一样的,比如ForumID为2的有1999条,ForumID为3的只有一条,这时使 用


SET SHOWPLAN_TEXT ON –显示执行计划(CTRL+L),可查看查询语句使用了哪些索引
GO

SELECT * FROM Posts WHERE ForumID=2


会发现没有使用ForumID列的索引。


SELECT * FROM Posts WHERE ForumID=3

则使用了ForumID列的索引

进行大批量插入或更新应先删除索引最后再重建索引,避免每插入或更新一条数据时都要更新相应的索引,而影响更新速度。
复合索引(指两列或多列组成的索引,通常where后面由多个列组成的条件时,可以把这些列建成一个复合索引)

1) 只有当WHERE子句中指定索引键的第一列时才使用该索引。
例子:

CREATE INDEX Posts_INDEX ON Posts(ThreadID,ForumID)

如果

SELECT * FROM Posts WHERE ForumID=2

则查询不会使用Posts_INDEX索引,而

SELECT * FROM Posts WHERE ThreadID=10

则会使用Posts_INDEX索引

2) 索引不应过大(<= 8个字节为最好,int型相当于4个字节,SmallInt相当于2个字节)。
3) 首先定义最具唯一性的列(顺序不一样,索引是不一样的)
比如:A列有30%的数据是重复的,B列有10%的列是重复的,C列有25%的数据是重复的,这时候建立索引的列的顺序应当是 B C A

建立索引还有一个比较重要的选项:填充因子。下一篇继续。


分享到:
评论

相关推荐

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    在SQL Server 2000中,索引是数据库性能优化的关键组成部分,它极大地影响了数据查询的速度。本文将深入探讨SQL Server 2000中的索引优化,旨在帮助数据库管理员和开发人员理解如何有效地利用索引来提升系统性能。 ...

    SQL Server性能优化专题之五:负载均衡

    在SQL Server性能优化的过程中,负载均衡是一个至关重要的概念,尤其对于处理大型数据库的场景。负载均衡旨在有效地分配系统资源,确保服务器性能的稳定性和高可用性,避免单一节点过载,提高整体系统的响应时间和...

    SqlServer性能优化高效索引指南.pdf

    Sql Server性能优化高效索引指南是指在Sql Server数据库中,通过合理地设计和优化索引来提高数据库性能的一系列指南和最佳实践。本指南涵盖了索引的基本概念、索引的类型、索引的设计原则、索引的优化方法、索引的...

    SQL Server性能优化专题之一:磁盘缓存.pdf.rar

    在SQL Server性能优化的过程中,磁盘缓存是关键的一环,因为数据库的读写操作大量依赖于磁盘I/O效率。本专题将深入探讨如何利用SQL Server的内存管理和磁盘缓存策略来提升数据库的性能。 首先,了解SQL Server的...

    SQLServer性能优化篇

    资源名称:SQLServer性能优化篇内容简介: 本文档主要讲述的是SQLServer性能优化;在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的...

    SQL Server 2000完结篇系列之十:SQL Server 2000性能优化答疑

    在SQL Server 2000性能优化答疑这个专题中,我们将深入探讨如何提升数据库系统的运行效率,解决在实际操作中可能遇到的各种性能瓶颈问题。SQL Server 2000是微软公司推出的一款关系型数据库管理系统,尽管现在已经...

    SqlServer性能优化高效索引指南

    SqlServer通过索引碎片整理来优化性能,方法包括重整(REORGANIZE)和重建(REBUILD)。重整是联机对叶级页进行物理排序,重建则是重新构建索引结构。此外,填充因子(FILLFACTOR)的设置也会影响索引页的使用效率和...

    SQL Server 索引中include的魅力(具有包含性列的索引)

    SQL Server 索引中 include 的魅力(具有包含性列的索引)是指在非聚集索引中添加非键列,以扩展索引的功能,提高查询性能。通过将非键列添加到非聚集索引的叶级别,可以创建覆盖更多查询的非聚集索引。 重要概念:...

    SQL Server 索引结构及其使用(聚集索引与非聚集索引)

    SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍聚集索引和非聚集索引的概念、区别、使用场景和误区。 聚集索引是一种特殊的目录,根据一定规则排列的...

    SQL Server 2000完结篇系列之八:SQL Server 2000过程优化详解

    在SQL Server 2000这个经典版本中,数据库管理员和开发者经常面临性能优化的挑战。本篇将深入探讨SQL Server 2000过程优化的相关知识点,旨在帮助你提升数据库系统的运行效率。 1. **查询优化器**:SQL Server 2000...

    优化SQL Server索引的小技巧

    其中,优化数据库索引的使用是提高 SQL Server 性能的关键因素之一。在本文中,我们将讨论如何用 SQL Server 的工具来优化数据库索引的使用,并涉及到有关索引的一般性知识。 索引的类型主要有两种:clustered 索引...

    SqlServer 数据库索引优化详解

    深入理解SqlServer索引机制及合理优化数据库

    SQLServer 索引查询优化指南

    通过理解这些概念和技巧,开发者能够更好地理解SQLServer索引的工作原理,从而更有效地优化查询,提升数据库系统的整体性能。这个PPT资料将详细讲解这些内容,对于SQLServer的开发和管理员来说,是一份宝贵的资源。

    SqlServer索引工作原理

    SqlServer索引工作原理 在了解SqlServer索引工作原理之前,我们需要了解...SqlServer索引工作原理是数据库性能优化的关键所在。通过了解索引的工作原理,我们可以更好地设计和优化数据库,提高数据查询的速度和效率。

    sqlserver管理索引优化SQL语句

    sqlserver管理索引优化SQL语句

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 索引优化章节 示例数据库脚本

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。

    SQL+Server+性能优化及管理艺术 脚本优化文件

    在SQL Server数据库管理系统中,性能优化...以上所述只是SQL Server性能优化和管理的一部分,实际操作中还需要结合具体业务场景和硬件环境进行综合考虑。通过深入学习和实践,可以不断提升SQL Server的管理和优化能力。

    sql server的性能优化x

    本文将以SQL Server自带的Northwind数据库为例,详细介绍SQL Server内部数据结构的相关知识,包括聚集索引、非聚集索引和堆等数据结构,以及如何利用这些知识进行性能优化。 #### 二、硬件优化 在硬件优化方面,...

    sqlserver索引表设计数据类型选择

    该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接

    SQLServer索引碎片和解决方法

    SQLServer的维护计划向导可以帮助设置定期的索引优化任务,确保数据库性能的稳定。同时,合理设计索引,如避免过多的小字段索引,以及选择适合业务场景的索引类型(如聚集索引和非聚集索引),也能有效预防碎片的...

Global site tag (gtag.js) - Google Analytics