a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 155|回复: 0

[考试辅导] 微软辅导:SQL2005合理的索引设计

[复制链接]
发表于 2012-8-3 00:05:24 | 显示全部楼层 |阅读模式
合理的索引有助于晋升系统机能和可用水平,我工作中见过一个设计错误的索指导致sqlserver将一台4cpu的处事器资本用尽。 权威参考参见msdn:   1、评估索引自己的占用空间,当索引相对于其数据自己过大可能会无较着浸染。这种情形表此刻:表很小,索引列过多,索引碎片过多。当索引在select中不起浸染时,你还必需在insert和update、delete这些操作中去维护这些不起浸染的数据。
: y& S# E+ _+ h. f% f5 i  2、In语句不必然不能使用索引,where id in(1,2)和where id =1 or id=2是等效的,这里的in和not in的机能是不异的。而不能使用索引的原因是嵌套发芽: where id in(select 1 union select 2)。! W. A; ^, ^7 M: O  |: @
  3、解除嵌套发芽无法操作索引的法子是用exists子发芽,select * from tb1 a where exists(select 1 from tb2 where id=a.id)。而exists和not exists的机能和tb1的数据量无关,他们的机能分歧在于tb2中的数据量。8 z: A  @0 P* J' M0 F3 s3 v6 d
  4、Like子句可以操作索引,所以尽可能少用left,right和substring函数。
8 O2 u6 U, \/ T  m- [/ H! X/ f; `  5、函数不能使用索引,好比convert(varchar(7),date,120)=‘2008-06’,或者datediff函数、甚至和常量的加减乘除运算等,正确的做法是用斗劲符号或者尽可能把datediff之类的函数放到等号右边。' ?: I* B2 q+ x& u  @) z! T
  6、不用担忧隐式转换,它老是转换等号右边的。好比 where id=‘2’ 和where id=2是等效的。
7 h* y; e: d' c& J  7、聚积索引的发芽机能好于非聚积索引,可是维护价钱很大,对于他的数据改变会引起整行数据的物理位置移动。同时聚积索引还要为非聚积索引供给索引处事,所以尽量不用过大的列或过多的列作聚积索引。
8 I1 c! v7 ~. `+ r6 K: h  8、聚积索引可以极大优化大于,小于,group by和order by以及join语句的发芽机能。  p7 N* d0 R- G7 [: m7 j6 R& U" a
  9、一张表只能由一个聚积索引。
  k; \1 ~% }: \. W  10、独一索引有助于发芽优化。
- }( N& d2 O# y% m8 E1 H" L, U  11、连系索引的第一列可以零丁使用,其他的索引列在零丁的where子句中不起浸染。+ N8 ~# l$ S' _( L. L
  12、索引的升序降序对order by子句的影响很大。+ x* n+ I& k1 Q- y" s7 b
  13、合适特定前提的计较列也可以建树索引。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 20:51 , Processed in 0.193190 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表