语句使用1=1导致MAX时索引失效

简介: 在一个分区表上的一个列建立了索引。。主要的目的是:是我们需要很快的获取CDB_BUSINESS_MAPPING_BS 表的最大时间,然后我们老大就在那个列创建了全局索引:已在该列创建全局索引。
在一个分区表上的一个列建立了索引。。主要的目的是:是我们需要很快的获取CDB_BUSINESS_MAPPING_BS 表的最大时间,然后我们老大就在那个列创建了全局索引:已在该列创建全局索引。
create index TS_CDB.IDX_CDB_UPTIME on TS_CDB.CDB_BUSINESS_MAPPING_BS (CDB_UPDATE_DATE) Nologging tablespace
 I_DATA_01 online parallel 5;
alter index ts_cdb.IDX_CDB_UPTIME noparallel;
 请使用类似如下语句获取相关的值:
 
select max(CDB_UPDATE_DATE)  from ts_cdb.CDB_BUSINESS_MAPPING_BS;
 
SELECT max(CDB_UPDATE_DATE) as MAX_CDB_UPDATE_DATE FROM ts_cdb.CDB_BUSINESS_MAPPING_BS a WHERE
CDB_UPDATE_DATE BETWEEN  TO_DATE('2001-05-08 00:16:37','yyyy-mm-dd hh24:mi:ss')  AND  TO_DATE('2012-05-11 03:08:59','yyyy-mm-dd hh24:mi:ss');
我想,问,为啥子
select max(CDB_UPDATE_DATE)  from ts_cdb.CDB_BUSINESS_MAPPING_BS where 1=1,会使得语句不走创建的全局索引?
 
回答:
select max(CDB_UPDATE_DATE)  from ts_cdb.CDB_BUSINESS_MAPPING_BS where 1=1 and CDB_UPDATE_DATE is not null;
 
猜测可能是1=1 这个条件本生需要返回所有的值 包括空值。而索引本生是不记录空值的。但是没找到官方说明。记录一下
 
 
 
目录
打赏
0
0
0
0
91
分享
相关文章
函数使得索引列失效
      在索引列上使用函数使得索引失效的是常见的索引失效原因之一,因此尽可能的避免在索引列上使用函数。尽管可以使用基于函数的索引来 解决索引失效的问题,但如此一来带来的比如磁盘空间的占用以及列上过多的索引导致DML性能的下降。
653 0
谁还没碰过索引失效呢
今天就来跟大家盘一盘,常见的 6 种会发生索引失效的场景。 不仅会用实验案例给大家说明,也会清楚每个索引失效的原因。
谁还没碰过索引失效呢
索引失效的几种场景
在数据库SQL优化中,百分之80%的问题SQL都可以通过索引来解决,但是有时候我们也会碰到一种情况,明明索引都有,为什么MySQL没有选择走索引而是走了全表扫描呢?近期就碰到一个案例,同大家分析一个当时的解决思路以及对索引失效的几种情况总结一下~
3636 0
探讨一下索引失效的几种场景
大家好前面我们介绍一下关于实战的知识点。主要应用于表数据比较多的情况下,如何巧妙地从中取出几条数据。今天介绍一下索引失效的几种不好发现的情况。
探讨一下索引失效的几种场景
14. 什么情况下索引会失效 ?
了解 MySQL 索引失效的情况对优化 SQL 查询至关重要。避免在列上使用函数、运算、!=、not in、OR 和 %value% LIKE 操作,以保持索引有效性。使用组合索引代替多个单列索引,防止范围查询后的列无法使用索引。注意,NULL 值、列类型不匹配和隐式转换也可能导致索引失效。
121 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等