阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

索引优化原则及Oracle中索引总结

422次阅读
没有评论

共计 2380 个字符,预计需要花费 6 分钟才能阅读完成。

Oracle 索引建立原则

  • 确定针对该表的操作是大量的查询操作还是大量的增删改操作。
  • 尝试建立索引来帮助特定的查询。检查自己的 sql 语句,为那些频繁在 where 子句中出现的字段建立索引。
  • where 语句中不得不对查询列采用函数查询,如 upper 函数,最好建立相应函数索引;
  • 在 SQL 语句中经常进行 GROUP BY、ORDER BY 的字段上建立索引
  • 用于联接的列(主健 / 外健)上建立索引;
  • 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定;
  • 尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间。
  • 对于小型的表,建立索引可能会影响性能
  • 在不同值较少的字段上不必要建立索引,如性别字段;
  • 应该避免对具有较少值的字段进行索引。???
  • 避免选择大型数据类型的列作为索引。
  • 缺省情况下建立的是非簇集索引,但在以下情况下最好考虑簇集索引,如:含有有限数目(不是很少)唯一的列;进行大范围的查询;
  • 充分的利用索引可以减少表扫描 I / 0 的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各种查询的分析和预测中
  • 避免在有大量并发 DML 运算的表中使用 Bitmap 索引;
  • 经常被更新,或者一个表虽然很大,但是如果多数查询返回结果都超过表中总行数的 4%,那么一般认为也是不宜建立索引的。
  • 经常查询的记录数目少于表中所有记录总数的 5% 时就应当创建索引
  • 存储索引的表空间最好单独设定
  • 随着数据的变化,索引的效率会下降,因此应定期重建索引

Oracle 位图索引  B- 树索引

B- 树索引在 Oracle 中是一个通用的索引,在创建索引时它就是默认的索引类型。最多可以包括 32 列。

    创建语句:create index indexName on tableName(columnName);

    特点:

        1. 索引不存储 null 值。更准确的说,单列索引不存储 null 值,复合索引不存储全为 Null 的值。索引不能存储 Null,所以对这列采用 is null 条件时,因为索引上根本没 Null 值,不能利用到索引,只能全表扫描。

        2. 不适合键值较少的列。与数据块有关。

        3. 前导模糊查询不能利用索引 (like ‘%XX’ 或者 like ‘%XX%’)。这样会导致全表扫描。

位图索引 Oracle 为每个唯一键创建一个位图,然后把与键值所关联的 ROWID 保存为位图。最多可以包括 30 列。

    创建语句:create bitmap index indexName on tableName(columnName);

    特点:

        1. 相对于 B *Tree 索引, 占用的空间非常小, 创建和使用非常快。位图索引由于只存储键值的起止 Rowid 和位图, 占用的空间非常少。

        2. 不适合键值较多的列。

        3. 不适合 update、insert、delete 频繁的列。

        4. 可以存储 null 值。B*Tree 索引由于不记录空值, 当基于 is null 的查询时, 会使用全表扫描, 而对位图索引列进行 is null 查询时, 则可以使用索引。

        5. 当 select count(XX) 时, 可以直接访问索引中一个位图就快速得出统计数据。

        6. 当根据键值做 and,or 或 in(x,y,..) 查询时, 直接用索引的位图进行或运算, 快速得出结果行数据。

    位图索引有很多限制:

        基于规则的优化器不会考虑位图索引

        当执行 ATLER TABLE 语句,并修改包含有位图索引的列时,会使位图索引失效

        位图索引在索引块中储存了索引键的值;然而,他们并不能用户任何类型的完整性检查

        位图索引不能被申明为唯一索引

索引不会被命中的情况

1、查询谓词没有使用索引的主要边界,可能会导致不走索引。

    查询:SELECT * FROM T WHERE Y=XXX;

    假如 T 表上有一个包含 Y 值的组合索引,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择 TABLE ACCESS FULL,

    查询换成:SELECT Y FROM T WHERE Y = XXX,优化器会直接去索引中找到 Y 的值,因为从 B 树中就可以找相应的值。

2、如果在 B 树索引中有一个空值的时候,优化器可能不会走索引。

    查询:那么查询诸如 SELECT COUNT(*) FROM T 

    有两种方式可以让索引有效,一种是 SELECT COUNT(*) FROM T WHERE XXX IS NOT NULL 或者是不能为空。

3、在索引字段上使用函数,导致不会走索引。

    查询:SELECT * FROM T WHERE FUN(Y) = XXX。

    如果在 T 表上有一个索引 Y 时,索引也不会被用到,因为你要查询的列中所有的行都需要被计算一遍,

    可以在这个表上建立一个基于函数的索引,比如 CREATE INDEX IDXFUNT ON T(FUN(Y)); 这种方式,等于 Oracle 会建立一个存储所有函数计算结果的值,再进行查询的时候就不需要进行计算了。

4、索引不适用于隐式转换的情况。

    查询:SELECT * FROM T WHERE Y = 5 

    在 Y 上面有一个索引,但是 Y 列是 VARCHAR2 的,那么 Oracle 会将上面的 5 进行一个隐式的转换成 SELECT * FROM T WHERE TO_NUMBER(Y) = 5, 这个时候也是有可能用不到索引的。

5、如果表只有几个数据块大小,而且可以被 Oracle 一次性抓取,那么就没有使用索引的必要了,因为抓取索引还需要去根据 rowid 从数据块中获取相应的元素值,因此在表特别小的情况下,索引没有用到是情理当中的事情。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/141538.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2380字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7805207
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...