在前面说过了索引能极大的提高数据的检索速度,那为什么不在每一个列上建索引呢?初学者可能会困惑这个问题,而且通常不知道哪些列该建索引,哪些不
该建,
甚至于会把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索引优化详解
资源名称:SQLServer性能优化篇内容简介: 本文档主要讲述的是SQLServer性能优化;在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的...
SqlServer性能优化高效索引指南
深入理解SqlServer索引机制及合理优化数据库
sqlserver管理索引优化SQL语句
Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。
SQL2005性能优化大全,sqlserver性能优化,包括:什么叫做索引、利用索引优化sqlserver查询、使用数据库分区表提高程序检索效率、提高数据库查询效率的实用方法、SQL数据进行排序、分组、统计技巧;SQL Server查询...
该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接
资源名称:SQLServer索引调优实践资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
优化SQL Server索引的小技巧.doc
性能不够,索引来凑 性能不好,建个索引就会好? 索引一定能提升性能? 高效索引指南 提高索引的存储效率 选择合适的索引 减少二次查找 ...
SQL Server 索引结构及其使用(聚集索引和非聚集索引)的区别与实例讲解,提高查询速度。
我在这里只讨论两种SQLServer索引,即clustered索引和nonclustered索引。当考察建立什么类型的索引时,你应当考虑数据类型和保存这些数据的column。同样,你也必须考虑数据库可能用到的查询类型以及使用的最为频繁的...
用于SqlServer的索引重建,全语句实现,可根据实际情况进行部分关键表的索引重建。
摘要 : 本 文 主 要通过 SLQ SERVER 随 机带 Northwind 数 据 库 样 本 来 理解 SQL SERVER ...库的 性能 , 对 于 程序 开发 人 员 以 及 数 据 库 管 理人 员 在 优化 SQL SERVER 数 据 库时 提 供 帮助 。
SQLServer索引设计经验谈SQLServer索引设计经验谈
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
SqlServer索引工作原理
从数据库管理系统 (DBMS) 的观点来看,视图是数据(元数据)的说明。创建典型视图时,通过 SELECT ...在视图扩展之后,查询优化器会为正在执行的查询编译单个执行计 划。 如果是非索引视图,视图在运行时将被实体化。
此文档中详细的记载了,SQL Server 索引中include的魅力(具有包含性列的索引),希望可以帮到下载的朋友们!