首页 > 数据库 >oracle组合索引什么情况下生效?

oracle组合索引什么情况下生效?

时间:2024-04-02 13:11:40浏览次数:21  
标签:组合 EMPLOYEE EMPLOYEES 查询 索引 生效 oracle ID

Oracle组合索引(composite index)是指在数据库表的多个列上创建的索引。当查询操作中涉及到这些列并且是组合索引的前导列时,组合索引会生效。

组合索引的前导列是指在索引中排在最前面的列。只有当查询的条件中使用了组合索引的前导列,且查询条件满足以下特性时,组合索引才会生效:

  1. 查询条件中的列顺序与索引中的列顺序完全一致。

  2. 查询条件中的列值是用等值比较(=)或范围比较(><>=<=)操作符。

  3. 如果查询条件中的列值是用LIKE操作符,则必须是不以通配符开始的常量。

例如,假设有一个表EMPLOYEES,其中包含列EMPLOYEE_IDDEPARTMENT_ID,并且有一个组合索引是基于这两个列创建的。

 

CREATE INDEX idx_employee_dept ON EMPLOYEES(EMPLOYEE_ID, DEPARTMENT_ID);

 

-- 使用索引的查询
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = 100 AND DEPARTMENT_ID = 20;

-- 查询条件顺序与索引顺序不一致,不会使用索引
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 20 AND EMPLOYEE_ID = 100;

-- 使用范围比较,会使用索引
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID > 100 AND DEPARTMENT_ID = 20;

-- 使用LIKE操作符且不是常量,不会使用索引
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID LIKE '100%';

 

请注意,只有当查询的前导列都用于查询条件,且顺序一致时,组合索引才会被使用。如果查询中包含了组合索引的其他列但不是前导列,或者查询条件中的列顺序与索引不一致,那么组合索引不会生效。

提示:AI自动生成,仅供参考。

 

标签:组合,EMPLOYEE,EMPLOYEES,查询,索引,生效,oracle,ID
From: https://www.cnblogs.com/nn2dw/p/18110356

相关文章

  • Oracle 解决like中无法匹配下划线的问题
    如果想检索出字段中包含下划线“_”的内容,该如何书写SQL语句呢?之所以问这个问题,是因为在Oracle中下划线在like中有着特殊的含义,它表示匹配任意一个字符。因此在查询包含下划线内容的时候需要“特殊关照”一下。既然被问到了这个问题,简单记录一下两种规避的方法,供参考。1.创建实验......
  • 鸿蒙ArkTS属性justifyContent不生效
    在鸿蒙ArkTS开发时,书写如下代码build(){Column(){Row(){Text('短信验证码登录')Text('忘记密码')}.justifyContent(FlexAlign.SpaceBetween)}.width('100%')}这时justifyContent并没有出现两端对齐的效果原因是没有设置Row......
  • 【了解下Oracle】
    ......
  • 深入学习MySQL1——体系结构、常见引擎、索引
    MySQL体系结构连接层:提供一些mysql的数据连接对象、用户校验、权限认证等服务服务层:在本层实现了一些核心功能,如SQL接口,缓存查询(8.0之后的版本已取消该功能)、SQL分析和优化,部分内置函数的执行。所有的跨存储引擎的功能都在这一层实现,如:过程、函数等。在该层,服务器会解析查询并......
  • MySQL索引失效
    假设有如下user表字段:使用mysql8字段类型说明idbigint主键namevarchar(30)姓名ageint年龄聚合索引设置为(age,name)1最佳左前缀法则---必须先使用前面字段,不能越过前面的字段使用后面的字段1.1范围条件右边的索引失效1.2不等于(!=或者<>)索引失......
  • 执行计划不走索引的几种情况总结
    优化器不想用索引,主要原因是优化器认为走索引还不如走顺序扫描代价低,因为索引扫描对应的是离散IO,我们可以通过调整random_page_cost告诉优化器随机IO代价值,非特殊情况不建议修改此值。1.表太小场景经常有开发问,为什么有索引而不走索引呢?因为优化器认为走索引方式太慢了!test=#c......
  • openGauss中的sequence跟Oracle的sequence有什么区别?
    openGauss中的sequence跟Oracle的sequence有什么区别?openGauss中也提供了sequence序列功能,使用Oracle的用户应该都非常喜欢使用这个功能。所以如果从Oracle迁移到openGauss,那么这项功能可以完全替代了。接下来我们简单测试一下:enmotech=>droptabletest;DROP......
  • 关于openGauss中的虚拟索引
    关于openGauss中的虚拟索引作为曾经的Oracle资深使用者,对于Oracle11gR2版本推出的invisibleIndex感觉一直很良好;因为这对于大部分情况下做优化是比较友好的。实际上openGauss2.0版本中也提供了类似的功能,下面我们来进行简单测试。首先我们创建一个测试表用来验证ope......
  • 关于动态使用keepAlive不生效的问题
    首先,我想实现在返回页面时,页面不进行刷新,比如我原先选择的第四页,返回后显示了第一页想到使用keepAlive缓存组件,大部分推荐的方法为这样,但是不生效<keep-alivev-if="$route.meta.keepAlive"><router-view/></keep-alive><router-viewv-else/>正确的使用方法......
  • NumPy库中的ndarray对象——ndarray的切片和索引
    一、普通切片与索引ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,切片对象可以通过内置的slice函数,并设置start,stop及step参数进行,从原数组中切割出一个新数组。我们来介绍一下sta......