Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22209
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-24 10:02
个人简介

Preparing to success.

文章分类

全部博文(13)

文章存档

2015年(1)

2014年(12)

我的朋友

分类: Sybase

2014-12-26 17:24:14

SYBASE建立索引的原则


建立Clustered索引原则:
1、在频繁的insert操作的表上,Cluster index 不要建立在单调上升值的列(如identify)上,
否则会经常引起锁冲突(尾页lock),在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。
2、用于范围查询的字段,如 col1 between 100 and 200; col12>;62 and <70。
3、用于order by的字段。
4、不经常改变(update)的字段。
5、用于连接条件的字段。


 建立非聚集索引原则:
1.满足查询条件的数据不超过20%。
2.能实现 index covering。
3.用于集函数、连接、group by和order by的列。
4.要权衡索引对查询速度的加快与降低修改速度之间的利弊。


其他有关建立索引的原则:
1、如果索引是唯一的,将其定义为Unique。
2、如果使用引用表索引(foreign key ... reference),被引用的列必须建立唯一索引。
3、如果建立索引的表有频繁的插入(Insert)操作,使用fillfactor减少数据页的分裂、提高并发性能并减少死锁,
fillfactor指定在运行 reorg rebuild 命令或 alter table 命令更改锁定方案而导致重新创建索引或复制表页时,
Adaptive Server 对每页的填充程度。fillfactor 百分比仅在重建索引时才有意义。有效值为 0 到 100。
4、如果在一个只读表上建立索引,将其fillfactor设为100以尽可能压缩数据和索引空间。
5、尽可能减少单个索引的长度。
6、在满足使用的前提下,尽可能使用小容量的数据类型(如用numeric代替char)。
7、数值(numeric)的比较在内部操作上比字符(string)略快。
8、只要可能,使用定长(fixed-length)、非空(non-null)、短(short)的数据类型字段作为索引。



复合索引


概念:
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。
用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。
但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。
同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。


使用:
创建索引
create index idx1 on table1(col1,col2,col3) 


查询
select * from table1 where col1= A and col2= B and col3 = C
这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,这叫覆盖式查询,这样的查询速度非常快。  


注意事项:
1、何时是用复合索引?在where条件中字段用索引,如果用多字段就用复合索引。一般在select的字段不要建什么索引,
(如果是要查询select col1 ,col2, col3 from mytable,就不需要上面的索引了)。根据where条件建索引是极其重要的一个原则。
注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要花费大量时间创建索引中。
2、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高。如: 
IDX1:create   index   idx1   on   table1(col2,col3,col5) 
select   *   from   table1   where   col2=A   and   col3=B   and   col5=D  如果是"select   *   from   table1   where   col3=B   and   col2=A   and   col5=D"
或者是"select   *   from   table1   where   col3=B"将不会使用索引,或者效果不明显。


建立复合字段索引的原则:
1、当条件内不包含复合索引的第一个字段时,有两种可能:
A、当所有select的字段均包含在复合索引内时,做所有索引页的遍历查询。
B、当select中包含非复合索引字段时,做全表数据页的遍历查询,既此时索引对检索无效。
2、复合索引优点:
A、提供索引覆盖(index covering)的机会,但仅限于所有查询(select)字段均包含在索引内。
B、当查询条件使用到复合索引的所有字段时,所需要时间少于这些字段建立单独索引的情况。
C、复合索引有利于强制多个属性合并后的唯一性限制。
3、复合索引缺点:
A、需要更多的索引空间,减少每个索引页包含的索引记录数,并增加索引页数目。
B、对复合索引中任何一个字段的变化(update或insert)都会更新索引,因此复合索引必须选择不进行变化的字段组成。
4、差的复合索引特点:
A、复合索引长度接近于记录长度。
B、复合索引中只有少量字段用于查询。
 
删除影响性能的索引
如果一个应用在白天执行数据修改,在夜间生成报表,就需要在早晨删除索引,在晚上再把索引重建起来。


阅读(790) | 评论(0) | 转发(0) |
0

上一篇:Linux 文件查找命令

下一篇:Sybase reorg

给主人留下些什么吧!~~