当前位置: 首页 > news >正文

Oracle复合索引规则指南

在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引。在组合索引的使用方面,Oracle有以下特点:

    1、 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的where子句中时,才会使用到该索引;
    2、 在使用Oracle9i之前的基于成本的优化器(CBO)时, 只有当组合索引的前导列出现在SQL语句的where子句中时,才可能会使用到该索引,这取决于优化器计算的使用索引的成本和使用全表扫描的成本,Oracle会自动选择成本低的访问路径;
    3、 从Oracle9i起,Oracle引入了一种新的索引扫描方式——索引跳跃扫描(index skip scan),这种扫描方式只有基于成本的优化器(CBO)才能使用。这样,当SQL语句的where子句中即使没有组合索引的前导列,并且索引跳跃扫描的成本低于其他扫描方式的成本时,Oracle就会使用该方式扫描组合索引;
    4、 Oracle优化器有时会做出错误的选择,因为它再“聪明”,也不如我们SQL语句编写人员更清楚表中数据的分布,在这种情况下,通过使用提示(hint),我们可以帮助Oracle优化器作出更好的选择。

1.创建语句

CREATE INDEX index_name ON table_name (column1, column2, ...);

在Oracle数据库中,复合索引是基于多个列创建的索引。当查询语句中的WHERE子句条件使用了复合索引中的列,并且满足一定的条件时,Oracle的优化器 会选择使用这个复合索引来提高查询性能。

2. 应用规则

要使复合索引被使用,查询中的条件需要满足以下规则:

最左前缀规则:复合索引中的列必须按照索引创建时的顺序出现在查询条件中,且从左到右不能跳过任何列。

例如,如果有一个复合索引是基于列(A, B, C)创建的,那么以下查询条件可以利用这个索引:

WHERE A = :value
WHERE A = :value AND B = :value2
WHERE A = :value AND C = :value3
WHERE A = :value AND B = :value2 AND C = :value3

但以下查询条件则不会使用这个索引:

WHERE B = :value2(缺少A列)
WHERE A = :value AND C = :value3(跳过了B列)

3. 解释说明

选择性:索引列的选择性越高,索引被使用的可能性越大。选择性是指不同值的数量与表中总行数的比值。具有高选择性的列(即列中的值分布较为均匀)通常更能受益于索引。
统计信息:Oracle的优化器依赖于统计信息来决定是否使用索引。如果统计信息不准确或过时,优化器可能不会选择最优的执行计划。因此,需要定期收集和维护表还有索引的统计信息。
查询优化器的决策:当查询条件满足复合索引的使用规则,查询优化器也可能出于其他原因(如成本估算、执行计划的选择等)而决定不使用索引。

http://www.lryc.cn/news/512589.html

相关文章:

  • JS - Array Api
  • 【JS】for-in 和 for-of遍历对象的区别
  • 【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
  • 深度学习blog- 数学基础(全是数学)
  • 最后100米配送
  • Linux的进程替换以及基础IO
  • 《计算机网络A》单选题-复习题库
  • 闲谭Scala(2)--安装与环境配置
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
  • Python 中的 with open:文件操作的最佳实践
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • AI 智能助手对话系统
  • 2024年秋词法分析作业(满分25分)
  • Docker镜像瘦身:从1.43G到22.4MB
  • 前端加解密对抗encrypt-labs
  • Android Notification 问题:Invalid notification (no valid small icon)
  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • ES中查询中参数的解析
  • 学习笔记:使用 pandas 和 Seaborn 绘制柱状图
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 后端开发-Maven
  • 自动化办公-合并多个excel
  • mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
  • 小程序基础 —— 08 文件和目录结构
  • FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
  • MySQLOCP考试过了,题库很稳,经验分享。
  • WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)
  • Kafka 幂等性与事务