欢迎来到天天文库
浏览记录
ID:14328276
大小:41.00 KB
页数:15页
时间:2018-07-27
《oracle索引与高性能sql介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ORACLE索引与高性能SQL介绍ORACLE索引与高性能SQL介绍索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据; Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引; 索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。 使用索引的目的 加快查询速度 减少I/O操作 消除磁盘排序 何时使用索引 查询返回的记录数 排序表<40% 非排序表<7% 表的碎片较多(频繁增加、删除) 索引的种类 非唯一索引(最常用) 唯一
2、索引 位图索引 局部有前缀分区索引 局部无前缀分区索引 全局有前缀分区索引 散列分区索引 基于函数的索引 管理索引的准则 在表中插入数据后创建索引 。在用SQL*Loader或import工具插入或装载数据后,建立索引比较有效; 索引正确的表和列 。经常检索排序大表中40%或非排序表7%的行,建议建索引; 。为了改善多表关联,索引列用于联结; 。列中的值相对比较唯一; 。取值范围(大:B*树索引,小:位图索引); 。Date型列一般适合基于函数的索引; 。列中有许多空值,不适合建立索引 为性能而安排索引列 。经常一起使用多个字
3、段检索记录,组合索引比单索引更有效; 。把最常用的列放在最前面,例:dx_groupid_serv_id(groupid,serv_id),在where条件中使用groupid或groupid,serv_id,查询将使用索引,若仅用到serv_id字段,则索引无效; 。合并/拆分不必要的索引。 限制每个表索引的数量 。一个表可以有几百个索引(你会这样做吗?),但是对于频繁插入和更新表,索引越多系统CPU,I/O负担就越重; 。建议每张表不超过5个索引。 删除不再需要的索引 。索引无效,集中表现在该使用基于函数的索引或位图索引,而使用了B*树索引; 。应用中的
4、查询不使用索引; 。重建索引之前必须先删除索引,若用alterindex…rebuild重建索引,则不必删除索引。 索引数据块空间使用 。创建索引时指定表空间,特别是在建立主键时,应明确指定表空间; 。合理设定pctfress,注意:不能给索引指定pctused; 。估计索引的大小和合理地设置存储参数,默认为表空间大小,或initial与next设置成一样大。 考虑并行创建索引 。对大表可以采用并行创建索引,在并行创建索引时,存储参数被每个查询服务器进程分别使用,例如:initial为1M,并行度为8,则创建索引期间至少要消耗8M空间; 考虑用nolog
5、ging创建索引 。对大表创建索引可以使用nologging来减少重做日志; 。节省重做日志文件的空间; 。缩短创建索引的时间; 。改善了并行创建大索引时的性能。 怎样建立最佳索引 明确地创建索引 createindexindex_nameontable_name(field_name) tablespacetablespace_name pctfree5 initrans2 maxtrans255 storage ( minextents1 maxextents16382 pctincrease0 ); 创建基于函数的索引 。常用
6、与UPPER、LOWER、TO_CHAR(date)等函数分类上,例: createindexidx_funconemp(UPPER(ename))tablespacetablespace_name; 创建位图索引 。对基数较小,且基数相对稳定的列建立索引时,首先应该考虑位图索引,例: createbitmapindexidx_bitmonclass(classno)tablespacetablespace_name; 明确地创建唯一索引 。可以用createuniqueindex语句来创建唯一索引,例: createuniqueindexdept_uniqu
7、e_idxondept(dept_no)tablespaceidx_1; 创建与约束相关的索引 。可以用usingindex字句,为与unique和primarykey约束相关的索引,例如: altertabletable_name addconstraintPK_primary_keynameprimarykey(field_name) usingindextablespacetablespace_n
此文档下载收益归作者所有