推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

ORACLE_索引篇分析

   2023-07-02 网络整理佚名2180
核心提示:典型索引失效1、在索引列上使用函数。当SQL语句的WHERE子句中有用到复合索引的领导字段时,优化器会考虑用到复合索引来访问.当有几个查询语句都是查询同样的几个字段值时,则可以考虑在这几个字段上建立复合索引.|-从上面的执行计划可以看出,优化器首先是根据为刚才建立的索引TBLID来找到100的ROWID,然后根据ROWID去找到10

索引文章分析》为会员分享,可在线阅读。 更多关于《索引文章分析(38页珍藏版)》的信息,请在人人文库在线搜索。

1、索引 Index RDM 吴桂林索引的概念 索引是一个可选的与表关联的独立对象,提高查询速度,通过默认的键值排序代替全表扫描,提高查询效率。 索引以二叉树机制存储,叶子节点存储了表中数据行的rowid(数据的物理地址)。 B树索引位图索引的优缺点。 优缺点:提高查询速度,包括索引条件,,; 提高分组和排序的速度。 缺点:需要创建和维护索引,耗时且随着数据量的增加而增加; 索引需要物理空间,处理表中数据时需要动态维护索引 索引类型 1. 单列索引 2. 复合索引 3. 位图索引 4. 函数索引 5.

2.反向索引 6.分区索引和全局索引 单列索引 基于单列创建的索引是默认的索引类型。 由于索引是通过rowid来访问数据的,当范围扫描的数据占总数据量10%以上时,使用索引的消耗不如全表扫描(全表扫描是多块的)读取,索引扫描每次有两个IO,一个用于索引块,一个用于数据)示例 a.from a 2 where = and a.来自 t_use

3. rinfo a 2 where = 和 ”“ ,,, from where =; - - - - P1 10000 P2 20000 P3 全局分区索引 全局分区索引

4、是在整个分区表上建立索引,然后对索引进行分区。 索引分区和分区表之间的关系并不是简单的一对一的关系。 全局分区索引删除索引drop索引; 在 test(id) 上的 ID 列上重新创建索引 ;SQL ,,, from where =; 没有行,

5. TYPE,来自其中=; - - - TEST 从上面可以看出,此时是一个普通的索引。 根本就没有记录。 按范围(id)对测试(数据)进行全局分区索引索引(p1小于(10000),p2值

6. es 小于 () ); by range(id) *ERROR at line 2:ORA-14038: index must be 该错误指示的索引必须是,即索引分区的列必须是其基表的分区列。 按范围(id)对测试(id)进行索引(p1小于(10000),p2小于t

7. han() );索引.SQL,,, from where =; - - - - P1 10000 P2 典型索引失败 1. 使用索引列上的函数。如、、INSTR 等对索引列进行操作。 需要建立功能指标

8.解决了。 2、新创建的表还没有来得及生成统计信息,就分析一下吧。 3、根据成本分析,访问的表太小,使用全表扫描的消耗小于使用索引的消耗。 4. 使用、不在、不存在。 对于这三种情况,大多数情况下结果集被认为非常大。 一般大于5%-15%,就不使用指数,而使用FTS。 5、独自一人,。 6.像%_百分号在前。 7. 单独引用复合索引中不在第一个位置的索引列。 8、字符字段为数字时,where条件中不要加引号。 9、当变量使用times变量,并且表的字段使用date变量时。 或者相反的情况。 10.如果索引失败,可以考虑重建索引。 11.B树索引为null不会走,是n

9. ot null会走,位图索引为null,不为null也会走,联合索引不为null只要索引列建立了(排名不分先后)都会走。 创建索引的注意事项 1、一般来说,比较小的表不需要创建索引; 2、即使对于大表,如果需要频繁查询的数据不超过10%到15%,那么就没有必要为它们创建索引。 因为这时候索引的开销可能远大于性能的提升。 这个比率只是一个经验数据。 如果数据库管理员需要得出更准确的结论,那么就需要进行测试分析。 3、比如对于一些重复内容较少的栏目,尤其是那些定义了唯一约束的栏目。 在这些列上建立索引往往可以取得非常好的效果。 例如对于一些非 Nu 的空值列

10、ll值混合列的情况下,如果用户需要频繁查询所有非空值记录的列,最好为其设置索引。 如果经常需要多表连接查询,对使用和连接的列设置索引可以达到事半功倍的效果。 创建索引的注意事项 4、数据库管理员需要在一段时间后,比如一年后,对数据库索引进行优化。 该去掉的就去掉,该调整的就调整,以提高数据库的性能。 5. 一般来说,表的索引越多,查询速度就越快。 但表的更新速度会降低。 这主要是因为更新表(例如向表中插入一条记录)的速度随着索引的增加而增加。 这主要是因为更新记录的同时需要更新相关的索引信息。 为此,表中创建多少个索引合适,需要在更新速度和查询速度之间取得平衡。索引创建注意事项

11.含义6.对于一些数据仓库或者决策数据库系统,主要用于查询。 相关记录往往是在数据库初始化时注入的。 此时,设置更多的索引可以提高数据库的查询性能。 同时,由于记录更新量不是很大,当索引较多时,更新速度也不会受到影响。 即使一开始需要导入大量数据,此时也可以禁用索引。 等待数据导入完成后再启用索引。 这样就可以减少索引对数据更新的影响。 相反,如果那些表中的记录经常需要更新,比如一些事务性应用系统,数据更新操作就很常见了。 这时如果一个表建立过多的索引,就会影响更新的速度。 7、关于位图索引。基数是位图索引中的一个基本定义,表示数据库表中某个字段的内容不存在重复

12、数值。比如员工信息表中的性别字段,一般只有男、女两个值,所以它的基数是2; 对于婚姻状况字段,只有已婚、未婚、离婚三种状态,基数为 3 ; 国籍列表中只有几个值。 创建索引的基本规则。 选择索引字段的原则:WHERE子句中最常用的字段。 具有相同的值,即有很多唯一值,选择性非常好)在主键字段上自动建立索引,在选择性差的字段上建立索引只有在这个字段的值分布非常大的情况下才有好处倾斜(在这种情况下,一两个字段值比其他字段值显得少很多) 不要在唯一值很少的字段上建立 B-TREE 索引。 在这种情况下,你

13. 您可以考虑在这些字段上构建位图索引。 在在线事务处理环境中,并发度很高,索引经常被修改,所以不应该建立位图索引,也不要在频繁修改的字段上建立索引。 当有,,操作时,除了更新表中的数据外,还必须更新索引,并且就像更新数据,或者生成恢复和重做条目一样,不要在对表有用的字段上建立索引功能。 在这种情况下,优化索引器将不会使用索引,除非您创建函数索引。 建立索引后,请比较索引后获得的查询性能提升和运行性能损失。 比较得失后,最终决定是否建立该指数 创建指数的基本规则 综合指数的优点: 提高选择性: 综合指数

14、索引比单个字段的索引更有选择性,减少I/O:如果要查询的字段都包含在复合索引的字段中,则只需要访问索引而不需要访问表。 什么情况下优化器会使用复合索引? 那指数呢? (a) 当SQL语句的WHERE子句中使用了复合索引的前导字段时,优化器会考虑使用复合索引来访问。 (b) 当某些字段在 SQL 语句的 WHERE 子句中时 通常通过 AND 运算符一起用作过滤谓词,并且当这些字段一起的选择性优于每个单独字段的选择性时,可以考虑使用这些字段构建复合索引。 (c)当有多个查询语句查询相同字段值时,可以考虑对这些字段建立复合索引。 组合索引字段排序原则:保证W

15. HERE子句中使用的字段是复合索引的前导字段。 如果某个字段在 WHERE 子句中使用频率最高,则在构建复合索引时(在 INDEX 语句中)可以考虑将该字段放在前面 如果 WHERE 子句中所有字段使用频率相同,则选择最多的字段将排在前面,并且选择性最少的字段将排在最后 如果WHERE子句中所有字段的使用频率相同,如果数据是按某个字段进行物理排序的,那么可以考虑将该字段放在组合索引中的第一位。 超过300条数据的表应该有索引; 经常与其他表连接的表应该在连接字段上有索引; 经常出现在Where子句中

16. 中的字段,尤其是大表的字段,应该建立索引; 索引应建立在选择性高的领域; 索引应该建立在小字段上,不要为大文本字段甚至超长字段建立索引; 复合指数的建立需要仔细分析; 尝试使用单字段索引代替: A、正确选择复合索引中的主列字段,一般是选择性较好的字段; B、复合索引的几个字段是否经常以AND方式出现在Where子句中? 单字段查询很少甚至没有吗?如果是,可以建立复合索引; 否则,考虑单字段索引; C、如果复合索引包含的字段经常单独出现在Where子句中,则将其分解为多个单字段索引; D、如果复合索引包含的字段超过3个,则仔细考虑必要性,考虑减少复合字段; E.如果存在单字段索引

17、并且这些字段上有复合索引,一般可以删除复合索引; 对于数据操作频繁的表不要创建过多的索引; 删除无用的索引,避免对执行计划产生负面影响; 不使用索引 不使用索引的几种情况 1.隐式类型转换示例:是字符类型,但查询使用了数字类型 * from where = 。 符号查询示例: * from where id 和 id * from tbl where = 100; 执行Plan-Plan哈希值:

18.-| 身份证 | | 名称 | 行| 字节| 成本(%CPU)| 时间|-| 0 | | | 1 | 38 | 38 2 (0)| 00:00:01 | 1 | 按索引 ROWID 排列的表格| 待定| 1 | 38 | 38 2 (0)| 00:00:01 |* 2 | 索引扫描 | 待定 | 1 | | 1 (0)| 00:00:01 |- 从上面的执行计划可以看出,优化器首先根据刚刚创建的索引TBLID找到100的ROWID,然后根据该ROWID找到10的ROWID

19、0所在行数据。 示例索引全扫描向上表添加了联合索引。 在 TBL.NAME 和 TBL. 两列上,SQL 如下: INDEX O ON TBL(NAME,); NAME, from tbl 示例索引范围扫描执行以下语句: * from tbl where 10 and 100; 已选择 91 行。 执行计划-计划哈希值:-| 身份证 | | 钠

20.我| 行| 字节| 成本(%CPU)| 时间|-| 0 | | | 91 | 91 3458 | 3458 3 (0)| 00:00:01 | 1 | 按索引 ROWID 排列的表格| 待定| 91 | 91 3 (0)| 00:00:01 |* 2 | 指数范围扫描 | 待定 | 91 | 91 | 2 (0)| 00:00:01 |-当对索引列使用大于等于、小于等于等时,优化器会首先对索引列进行操作,进行索引范围扫描获取ROWID,然后根据ROWID找到对应的行ID。

21. 适当的数据。 示例索引快速全扫描 如果我们只需要获取所有时间,优化器将如何执行查询? 我们要检查的都在索引中。 执行如下语句,得到如下执行计划:from tbl; 选定的行。执行计划-计划哈希值:-| 身份证 | | 名称 | 行| 字节| 成本(%CPU)| 时间|-| 0 | | | 115K| 1471K| 63(2)| 00:00:01 | 1 | 索引快速全扫描| 待定| 115K| 1471K| 63(2)| 00:00:01 |-看到上面的执行计划是索引快速扫描(INDEX FAST FULL SCAN),因为所有需要获取的数据都在索引里面,所以只需要取出需要的数据即可的索引,就可以了

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON