- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle_索引
* * Oracle 索引 IT部项目开发二部 胡晓峰 为什么使用索引能提高查询速度? 索引的原理 索引的内部结构 索引的原理 Oracle 使用平衡树(Balance-tree)存储索引以便提升数据访问速度。当不使用索引时,用户必须对数据进行顺序扫描(sequential scan)来查找指定的值。 如果将一个已排序的值列(list of the values)划分为多个区间(range),每个区间的末尾包含指向下个区间的指针(pointer),而有哪些信誉好的足球投注网站树(search tree)中则保存指向每个区间的指针。这就是 Oracle 索引的基本原理。 rowid就是唯一标志记录物理位置的一个id 。 一般说来每一行数据对应的rowid是固定而且唯一的,在这一行数据存入数据库的时候就确定了。rowid只有在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。 Select rowid from t_lea_waybill where rownum10 索引的原理 索引的原理 在一个平衡树索引(B-tree index)中,最底层的索引块(叶块(leaf block))存储了被索引的数据值,以及对应的 rowid。叶块之间以双向链表的形式相互连接 。 索引的原理 索引的叶子节点实际上又构成了一个双向链表,执行索引区间扫描(值的有序扫描)也很容易,找到第一个值之后,只需根据需要,通过叶子节点向前或向后扫描就可以了。所以要满足诸如以下的谓词条件将相当简单: where x between 20 and 30 Oracle发现第一个最小值大于或等于20的索引叶子块,然后水平地遍历叶子节点链表,直到命中一个大于30的值。 索引的原理 索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000=0.99。 一个索引的选择性越接近于1,这个索引的效率就越高,针对每个不同值返回的行数也越少 索引的选择性 选择性计算方式user_indexes视图中的num_rows/表的记录总数 索引的原理 索引的二元高度可以理解为Balance-Tree的层级。 索引的二元高度(binary height) 在将ROWID返回给用户进程时索引的二元高度对这个过程中的I/O数量有着决定性的影响。二元高度的每个级别都会增加一个额外的读取块,而且由于这些块不能按顺序读取,它们都要求一个独立的I/O操作。我们检索一个二元高度为3的索引,这样会返回一行数据给用户,同时有4个块被读取:3个来自索引,一个来自表。随着索引的二元高度的增加,检索数据所要求的I/O数量也会随之增加。 索引的原理 索引的二元高度可以通过如下方式进行查询 select ind.blevel, ind.index_name, tab.table_name from user_indexes ind join user_tables tab on ind.table_name = tab.table_name where ind.index_type LOB --and tab.table_name = order by ind.blevel desc 一般索引的二元高度应该不超过3 索引的优点和缺点 能够提高查询速度。含where条件的Select、update和delete语句可以通过索引获得更快的查询速度。 可以加速表和表之间的连接。如最常使用的join语句。 索引的优点 索引的缺点 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 B-Tree 唯一索引 唯一索引(unique index)是索引中选择性最高的索引,也可以说唯一索引是速度最快的索引 只有数据是不重复的列上才能建立唯一索引 唯一索引可以对列中的数据起到唯一性约束作用 唯一索引内允许存在空值 在oracle中对表建立主键或者添加唯一性约束后会自动建立唯一索引 建立唯一索引的语句 Crate unique index index_name on table_name(conlumn) B-Tree 单列索引 单列索引是B-Tree索引中最为普通的索引,索引的性能和选择性有关 在一个表中不能对同一个字段建立多个单列索引 建立单列索引的语句 Crate index index_name on table_n
文档评论(0)