在前面说过了索引能极大的提高数据的检索速度,那为什么不在每一个列上建索引呢?初学者可能会困惑这个问题,而且通常不知道哪些列该建索引,哪些不
该建,
甚至于会把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性能优化的过程中,负载均衡是一个至关重要的概念,尤其对于处理大型数据库的场景。负载均衡旨在有效地分配系统资源,确保服务器性能的稳定性和高可用性,避免单一节点过载,提高整体系统的响应时间和...
Sql Server性能优化高效索引指南是指在Sql Server数据库中,通过合理地设计和优化索引来提高数据库性能的一系列指南和最佳实践。本指南涵盖了索引的基本概念、索引的类型、索引的设计原则、索引的优化方法、索引的...
在SQL Server性能优化的过程中,磁盘缓存是关键的一环,因为数据库的读写操作大量依赖于磁盘I/O效率。本专题将深入探讨如何利用SQL Server的内存管理和磁盘缓存策略来提升数据库的性能。 首先,了解SQL Server的...
资源名称:SQLServer性能优化篇内容简介: 本文档主要讲述的是SQLServer性能优化;在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的...
在SQL Server 2000性能优化答疑这个专题中,我们将深入探讨如何提升数据库系统的运行效率,解决在实际操作中可能遇到的各种性能瓶颈问题。SQL Server 2000是微软公司推出的一款关系型数据库管理系统,尽管现在已经...
SqlServer通过索引碎片整理来优化性能,方法包括重整(REORGANIZE)和重建(REBUILD)。重整是联机对叶级页进行物理排序,重建则是重新构建索引结构。此外,填充因子(FILLFACTOR)的设置也会影响索引页的使用效率和...
SQL Server 索引中 include 的魅力(具有包含性列的索引)是指在非聚集索引中添加非键列,以扩展索引的功能,提高查询性能。通过将非键列添加到非聚集索引的叶级别,可以创建覆盖更多查询的非聚集索引。 重要概念:...
SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍聚集索引和非聚集索引的概念、区别、使用场景和误区。 聚集索引是一种特殊的目录,根据一定规则排列的...
在SQL Server 2000这个经典版本中,数据库管理员和开发者经常面临性能优化的挑战。本篇将深入探讨SQL Server 2000过程优化的相关知识点,旨在帮助你提升数据库系统的运行效率。 1. **查询优化器**:SQL Server 2000...
总的来说,索引视图是SQL Server中的一个重要性能优化工具,它通过预先计算和存储结果,优化了查询执行,尤其适用于特定类型的工作负载。正确地设计和应用索引视图,可以显著提高数据库系统的整体性能。
其中,优化数据库索引的使用是提高 SQL Server 性能的关键因素之一。在本文中,我们将讨论如何用 SQL Server 的工具来优化数据库索引的使用,并涉及到有关索引的一般性知识。 索引的类型主要有两种:clustered 索引...
深入理解SqlServer索引机制及合理优化数据库
通过理解这些概念和技巧,开发者能够更好地理解SQLServer索引的工作原理,从而更有效地优化查询,提升数据库系统的整体性能。这个PPT资料将详细讲解这些内容,对于SQLServer的开发和管理员来说,是一份宝贵的资源。
SqlServer索引工作原理 在了解SqlServer索引工作原理之前,我们需要了解...SqlServer索引工作原理是数据库性能优化的关键所在。通过了解索引的工作原理,我们可以更好地设计和优化数据库,提高数据查询的速度和效率。
sqlserver管理索引优化SQL语句
Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。
在SQL Server数据库管理系统中,性能优化...以上所述只是SQL Server性能优化和管理的一部分,实际操作中还需要结合具体业务场景和硬件环境进行综合考虑。通过深入学习和实践,可以不断提升SQL Server的管理和优化能力。
本文将以SQL Server自带的Northwind数据库为例,详细介绍SQL Server内部数据结构的相关知识,包括聚集索引、非聚集索引和堆等数据结构,以及如何利用这些知识进行性能优化。 #### 二、硬件优化 在硬件优化方面,...
该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接