数据库中的索引技术

数据库中的索引技术

ID:5831612

大小:49.00 KB

页数:7页

时间:2017-12-25

数据库中的索引技术_第1页
数据库中的索引技术_第2页
数据库中的索引技术_第3页
数据库中的索引技术_第4页
数据库中的索引技术_第5页
资源描述:

《数据库中的索引技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据库中的索引技术索引的设计目标:为了提升数据库的性能.索引建立的规则:在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。  在频繁进行排序或分组(即进行groupby或orderby操作)的列上建立索引。  在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。  如果待排序的列有多个,可以在这些列上建立复合索引(compoundindex)。使用

2、索引应注意的事项:(1)在下面两条select语句中:  select*fromtable1 where field1<=10000andfield1>=0;  select*fromtable1 where field1>=0andfield1<=10000;  如果数据表中的数据field1都>=0,则第一条select语句要比第二条select语句效率高的多,因为第二条select语句的第一个条件耗费了大量的系统资源。  第一个原则:在where子句中应把最具限制性的条件放在最前面。(2)在下面的select语句中:  select*fromt

3、ab where a=…andb=…andc=…; 若有索引index(a,b,c),则where子句中字段的顺序应和索引中字段顺序一致。  第二个原则:where子句中字段的顺序应和索引中字段顺序一致。以下假设在field1上有唯一索引I1,在field2上有非唯一索引I2。(3)selectfield3,field4fromtbwherefield1='sdf'    快  select*fromtbwherefield1='sdf'   慢,因为后者在索引扫描后要多一步ROWID表访问。(4)selectfield3,field4fromtbw

4、herefield1>='sdf'    快selectfield3,field4fromtbwherefield1>'sdf'    慢因为前者可以迅速定位索引。(5)selectfield3,field4fromtbwherefield2like'R%'  快  selectfield3,field4fromtbwherefield2like'%R'  慢,  因为后者不使用索引。(6)使用函数如:selectfield3,field4fromtbwhereupper(field2)='RMN'不使用索引。如果一个表有两万条记录,建议不使用函数;

5、如果一个表有五万条以上记录,严格禁止使用函数!两万条记录以下没有限制。(7)空值不在索引中存储,所以  selectfield3,field4fromtbwherefield2is[not]null不使用索引。(8)不等式如  selectfield3,field4fromtbwherefield2!='TOM'不使用索引。  相似地,  selectfield3,field4fromtbwherefield2notin('M','P')不使用索引。(9)多列索引,只有当查询中索引首列被用于条件时,索引才能被使用。(10) MAX,MIN等函数,如S

6、electmax(field2)fromtb使用索引。所以,如果需要对字段取max,min,sum等,应该加索引。一次只使用一个聚集函数,如:select“min”=min(field1),“max”=max(field1) fromtb   不如:select“min”=(selectmin(field1)fromtb),“max”=(selectmax(field1)fromtb)  (11)重复值过多的索引不会被查询优化器使用。而且因为建了索引,修改该字段值时还要修改索引,所以更新该字段的操作比没有索引更慢。(12)索引值过大(如在一个char

7、(40)的字段上建索引),会造成大量的I/O开销(甚至会超过表扫描的I/O开销)。因此,尽量使用整数索引。Sp_estspace可以计算表和索引的开销。(13)对于多列索引,orderby的顺序必须和索引的字段顺序一致。(14)在sybase中,如果orderby的字段组成一个簇索引,那么无须做orderby。记录的排列顺序是与簇索引一致的。(15)多表联结(具体查询方案需要通过测试得到)  where子句中限定条件尽量使用相关联的字段,且尽量把相关联的字段放在前面。  selecta.field1,b.field2froma,bwherea.fie

8、ld3=b.field3 1.field3上没有索引的情况下:  对a作全表扫描,结果排序  对b作全表扫描

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。