`
yaozuodaoforfly
  • 浏览: 118988 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

索引在哪些条件下会失效

 
阅读更多
IS NULL 或IS NOT NULL操作(判断字段是否为空)
判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。 
SELECT *
FROM   mtl_material_transactions mmt
WHERE  mmt.shipment_number IS NOT NULL

> 及 < 操作符(大于或小于操作符) 
大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找。
但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。    

like '%xx'将不使用索引,但like 'xx%'可以使用索引 
不使用索引 
SELECT *
FROM   mtl_material_transactions mmt
WHERE  mmt.shipment_number LIKE  '%12806557'    

‘!=’ 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.   
不使用索引:  
SELECT ACCOUNT_NAME 
FROM TRANSACTION 
WHERE AMOUNT !=0; 

使用索引:  
SELECT ACCOUNT_NAME 
FROM TRANSACTION 
WHERE AMOUNT >0;     

‘||’是字符连接函数. 就象其他函数那样, 停用了索引.  
不使用索引:  
SELECT ACCOUNT_NAME,AMOUNT   
FROM TRANSACTION  
WHERE ACCOUNT_NAME||ACCOUNT_TYPE=’AMEXA’;  

在这边测试时有使用索引 
使用索引:  
SELECT ACCOUNT_NAME,AMOUNT   
FROM TRANSACTION  
WHERE ACCOUNT_NAME = ‘AMEX’    
AND ACCOUNT_TYPE=’ A’;    

‘+’是数学函数. 就象其他数学函数那样, 停用了索引.  
不使用索引:  
SELECT ACCOUNT_NAME, AMOUNT 
FROM TRANSACTION 
WHERE AMOUNT + 3000 >5000;  

使用索引:  
SELECT ACCOUNT_NAME, AMOUNT 
FROM TRANSACTION 
WHERE AMOUNT > 2000 ;

相同的索引列不能互相比较,这将会启用全表扫描.  
不使用索引:  
SELECT ACCOUNT_NAME, AMOUNT 
FROM TRANSACTION 
WHERE ACCOUNT_NAME = NVL(:ACC_NAME,ACCOUNT_NAME);  

使用索引:  
SELECT ACCOUNT_NAME, AMOUNT 
FROM TRANSACTION 
WHERE ACCOUNT_NAME LIKE NVL(:ACC_NAME,’%’);    

使用UPPER,TO_NUMBER也会导致索引失效 
不使用索引 
SELECT *
FROM   mtl_material_transactions mmt
WHERE  UPPER(mmt.shipment_number) ='12806557'    

NOT IN将会导致索引失效 
不使用索引 
SELECT *
FROM   mtl_material_transactions mmt
WHERE  mmt.shipment_number IN ('12806557')
分享到:
评论

相关推荐

    MySQL中有哪些情况下数据库索引会失效详析

    降低DML性能,对于数据的任意增删改都需要调整对应的索引,甚至出现索引分裂 索引会产生相应的碎片,产生维护开销 一、explain 用法:explain +查询语句。 id:查询语句的序列号,上面图片中只有一个select 语句...

    MySQL_思维导图(全面).xmind.zip

    资源包括:1、mysql的架构介绍;2、索引优化分析;3、查询优化分析;4、mysql锁机制;...以及如何建立高效的索引、索引在哪些情况下会失效、生产环璋下,如果进行sql问题排查及优化。属于非常干货的内容。

    数据库深入浅出MySQL SQL优化:原因、定位、分析与索引失效

    本文将围绕为什么要进行SQL优化、如何找到慢SQL、如何分析SQL、回表与索引的概念以及什么情况下会造成索引失效等方面进行讲解。 对MySQL进行SQL优化是提高数据库性能的关键。通过找到慢SQL、分析SQL、合理使用索引,...

    sql优化、索引的建立和运用以及多表连接建索引的拙劣见解

    - `NOT IN`在某些情况下会导致索引失效。 - 示例:`SELECT * FROM A WHERE A.id NOT IN (SELECT B.id FROM B);` - 更优方案:`SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.id = A.id);` #### 多...

    SQL Server索引在实际应用中的研究.pdf

    在SQL Server中,默认情况下会在主键上建立聚集索引,但是主键通常是一个自增ID,它的值是自动生成的,并且在实际查询中很少被用来直接搜索数据。因此,将主键作为聚集索引可能是对聚集索引资源的一种浪费。 2. 在...

    Mysql性能调优专题.zip

    通过选择合适的索引类型、避免索引失效(如在WHERE子句中使用不等于或函数操作索引列)以及考虑全表扫描和索引扫描的平衡,可以显著提高查询性能。 4. **高性能表结构与索引设计**:表的设计应遵循范式原则,减少...

    数据库优化方案

    使用函数或者表达式对字段进行操作时,如果涉及的字段上有索引,那么可能会导致索引失效。类似地,如果在WHERE子句中使用了LIKE语句,尤其是像"%abc%"这样的模式,将导致无法利用索引而进行全表扫描。这种情况下,...

    数据库优化原则

    - IN和OR子句可能导致索引失效,可以考虑将其拆分为多个子句来提高性能。 9. **使用执行计划工具**: - 使用SET SHOWPLAN_ALL ON查看执行计划,帮助理解查询的执行方式。 10. **数据库完整性检查**: - 使用...

    数据库常用面试题目_基础题

    - 在什么场景下会选择关系型数据库(如MySQL),什么场景下会选择非关系型数据库(如MongoDB)? 2. **关系型数据库理论** - 什么是ACID特性?它们分别代表什么? - 请解释范式理论,第一范式到第三范式是如何...

    MySQL慢SQL语句常见诱因以及解决方法

    在没有索引的情况下,数据库必须进行全表扫描来定位数据,这在数据量大的情况下会显著降低查询速度。因此,合理地为数据库表字段创建索引是提升查询性能的重要手段。不过,即使建立了索引,也可能因为查询条件未命中...

    SQL语句优化技术分析

    1. **避免前导通配符**:尽量避免使用如`LIKE '%abc'`或`LIKE '%abc%'`这样的前导通配符模式,因为这通常会导致索引失效。如果可能的话,使用`LIKE 'abc%'`这样的模式,这样可以利用索引提高查询速度。 2. **使用...

    大厂面试系列二.pdf

    设置索引但无法使用的情况通常发生在查询条件中有函数或表达式操作,或者在联合索引中,查询条件未按索引定义的顺序使用字段,或者使用了不等于()等。 SQL语句的优化可以从合理使用索引、优化查询逻辑、减少子查询...

    2021-2022计算机二级等级考试试题及答案No.13261.docx

    "1,234,456"在某些地区设置下会被识别为1234456,但在标准的数值输入中,逗号是不推荐使用的。 3. 时间复杂度与空间复杂度:算法的时间复杂度和空间复杂度是衡量算法效率的两个重要指标,它们之间没有直接的关系。...

    性能测试规范及调优完全手册

    - **压力测试**:持续增加负载直至系统出现异常行为或崩溃,目的是发现系统在何种条件下会出现性能问题。 **2.2 配置测试** 配置测试旨在评估不同硬件和软件配置对系统性能的影响。通过更改硬件配置(如CPU型号、...

    software engineering advice from building large-scle distributed systems

    4. **容错机制**:鉴于硬件故障是不可避免的,设计时应充分考虑容错机制,确保系统能够在部分组件失效的情况下继续运行。 5. **多数据中心部署**:为了提高可用性和响应速度,需要在全球范围内部署多个数据中心。 6....

    Windows 7媒体库音视频文件实现局域网共享.docx

    - 当媒体文件的名称或路径发生改变时,媒体库的索引记录将会失效,需要更新媒体库信息以保持最新状态。 ##### 2.2 设置媒体库选项 - 在开始菜单中运行Windows Media Player (WMP),选择“转至媒体库”,查看导入...

    操作系统实验报告-实验九.docx

    `.`和`..`分别代表当前目录和父目录,通常在`ls`不带参数或使用`-l`时不显示,但在`-a`选项下会显示。 3. **文件与目录的删除**: 使用`rm`命令删除文件,`rmdir`用于删除空目录。当尝试删除非空目录时,需使用`...

    Android Webview重定向问题解决方法

    - `getCurrentIndex()`:获取当前页面在历史列表中的索引。 - `getItemAtIndex(index)`:根据索引获取历史列表中特定位置的页面信息。 3. 合理运用这些方法,可以实现自定义的回退逻辑。例如,如果需要在用户按下...

    vue.js中$set与数组更新方法

    在你的示例中,`arr1`的值最终也会更新,尽管这不是预期的行为,这可能是由于Vue在某些情况下会对整个数组进行重新渲染。 总结来说,为了确保数组变化能够正确反映到视图中,你应该使用`Vue.set`、`vm.$set`或者...

Global site tag (gtag.js) - Google Analytics