《基本索引原理》PPT课件.ppt

《基本索引原理》PPT课件.ppt

ID:52076910

大小:1.14 MB

页数:71页

时间:2020-03-31

《基本索引原理》PPT课件.ppt_第1页
《基本索引原理》PPT课件.ppt_第2页
《基本索引原理》PPT课件.ppt_第3页
《基本索引原理》PPT课件.ppt_第4页
《基本索引原理》PPT课件.ppt_第5页
资源描述:

《《基本索引原理》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基本索引概念当从表中读取数据时,Oracle提供了两个选择:从表中读取每一行(全表扫描)通过ROWID一次读取一行当我们要访问大型表的少数行时,可能需要使用索引。因为如果没有索引,那么只能进行全表扫描。索引改进性能的程度取决于两个因素:1、数据的选择性2、表数据在数据块上的分布如果选择性很高(例如身份证号码),那么根据索引值返回的ROWID很少,如果选择性很低(例如国家)则返回的ROWID很多,那么索引的性能将会大大降低如果选择性很高,但是相关的行在表中的存储位置并不互相靠近,则会进一步减少索引的益处,

2、如果匹配索引值的数据分散在表的多个数据块中,则必须从表中选择多个单独的块以满足查询,基于索引的读取是单块读取,如果使用全表扫描,使用的是多块读取以快速扫描表,因此全表扫描不见得比索引扫描速度慢。全表扫描和索引查找之间的平衡点1、分区2、并行DML3、并行查询4、使用db_file_multiblock_read_count进行更大的IO操作5、硬件更为快速6、磁盘上的缓存可以缓存更多的数据7、内存的廉价使得我们的内存进一步增大8、Oracle采用了增强的索引特性(例如跳跃式扫描索引)SELECT、UPD

3、ATE、DELETE+WHERE条件可以从索引中得到好处(前提是:当访问的行数较少时)一般来说,增加索引会带来insert语句性能的下降如果根据未索引列update索引列,那么也会带来性能的降低大量的delete也会因为索引的存在而导致性能降低因此我们要分析具体的情况,判断索引和DML语句之间的关系我们如何去去判断一个表上的索引呢?如果发现对一个表的DML速度较慢,可以执行上面的命令,判断是否是因为增加了索引而引起的性能问题。组合索引当某个索引包含有多个列时,我们称这个索引为组合索引。在使用组合索引的时

4、候,要谨慎选择索引列中的列顺序。一般来说,索引的第一列应该是最有可能在where子句中使用的列,并且也是在索引中最具有选择性的列。对于9i以前,查询只能在where子句中使用索引的第一列时使用索引。除非在where子句中给empno指定一个值,否则一般不会使用组合索引。从Oracle9i开始,引入了跳跃式索引扫描功能,即使在where子句中没有指定empno的数值,也会可能会使用索引。我们来举个例子,看一下跳跃式索引扫描。createindexsex_emp_idonemp(sex,emp_id)sel

5、ect*fromempwhereemp_id=123;在Oracle数据库的内部,生成了两个查询,然后对两个查询的ROWID进行了联合。当使用跳跃式索引扫描时,自动给SEX加上了数值,启用了两个查询。如果SEX有50个数值,那么需要启用50个查询才能完成查询,因此性能大大降低。因此是否适合使用跳跃式索引扫描,取决于第一个索引列的选择性。一般建议第一个列的可选性非常低。跳跃式索引扫描相对索引直接扫描速度要慢一些,但是相对表扫描速度还是要快很多。使用跳跃式索引的条件1优化器认为是合适的.2索引中的前导列的唯

6、一值的数量能满足一定的条件.3优化器要知道前导列的值分布(通过分析/统计表得到)4合适的SQL语句如果oracle没有选择使用跳跃式索引扫描,那么可能选择使用索引快速全局扫描或全表扫描。我们花点时间来研究一下Oracle中扫描数据的方法:1、全表扫描(FullTableScanFTS)Oracle读取表中所有的行、多块读操作可以大大的减少IO的次数、利用多块读可以大大的提高全表扫描的速度、只有在全表扫描的情况下才能使用多块读。在较大的表上不建议使用全表扫描、如果读取表的数据总量超过5%—10%,那么通常

7、进行全表扫描。并行查询可能会使得我们的路径选择采用全表扫描。2、通过ROWID对表进行读取(TableaccessbyROWID)ROWID指出了数据文件、块号、行号,通过ROWID是oracle数据库中读取单行数据最快速的方法。这种方法不会采用多块读、而是会采用单块读的方式。3、索引扫描或者索引查找(indexscanindexlookup)通过索引找到数据行的ROWID、然后通过ROWID直接到表中查找数据,这种方式称为索引查找或者索引扫描。因为一个ROWID对应一个数据行,因此这种方式采用的也是单

8、块读。在索引中,除了存储每个索引值、还存储相应的ROWID,索引扫描分为两步:1、扫描索引得到相应的ROWID2、通过找到的ROWID从表中读取相应的数据每次采用的都是单块IO读因为索引小、而且经常使用,因此通常被cache到内存中,因此第一步通常是逻辑读(数据可以从内存中得到)因为表数据比较大、因此第二步读通常是物理读,因此性能较低访问路径走的是主键索引,因此是INDEXUNIQUESCAN首先是索引扫描、然后是根据索引查找到的ROWID

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

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

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