以前在网上看到一些观点,in 或者not in 都不会用到索引,昨天在优化sql的时候,发现这些观点并不对
SELECT *
FROM WF_DOC_GW_FAWEN F
WHERE F.CFBT = 'ee' AND
F.NDOCID IN (SELECT DISTINCT GI.SRC_NDOCID
FROM WF_DOC_GW_INNER GI,
WF_DOC_GW GW
WHERE GI.NDOCID = GW.NDOCID AND
INSTR(', ' || GW.CPROCUSERLIST || ', ',
', ' || TO_CHAR(45901) || ', ') > 0 AND
GI.RETURNSTATUS IS NULL AND
GI.SRC_NDOCID IS NOT NULL)
从上面的执行计划中可以看到WF_DOC_GW_FAWEN的NDOCID字段在执行in的操作中用到了索引,如果子查询的记录数超过一定数量,in的操作也就不会用到索引了。
如果把in或为not in,WF_DOC_GW_FAWEN的NDOCID字段是不会用到索引的,不管子查询的数量是多还是少,但是出现了另外一种情况,WF_DOC_GW_INNER的SRC_NDOCID字段用到了索引,如下
SELECT *
FROM WF_DOC_GW_FAWEN F
WHERE F.CFBT = 'ee' AND
F.NDOCID NOT IN (SELECT DISTINCT GI.SRC_NDOCID
FROM WF_DOC_GW_INNER GI,
WF_DOC_GW GW
WHERE GI.NDOCID = GW.NDOCID AND
INSTR(', ' || GW.CPROCUSERLIST || ', ',
', ' || TO_CHAR(45901) || ', ') > 0 AND
GI.RETURNSTATUS IS NULL AND
GI.SRC_NDOCID IS NOT NULL)
由此推断,oracle在解析,编译sql语句的时候,对我们写的sql进行了变换,把子查询的字段和主查询的字段进行了关联
分享到:
相关推荐
索引通过创建一种数据结构(例如B树)来实现这一点,这种结构允许数据库管理系统能够快速定位到数据所在的物理位置。 #### 二、B+树结构 B+树是一种自平衡的树数据结构,常用于数据库索引。B+树的特点在于所有的...
同样,由于无索引,Oracle需要对每一行进行检查,找出包含目标`firstname`的记录。 3. 查询`Secondname`列:`select secondname from t_name;` 与上述情况相同,全表扫描是唯一的选择。 接着,我们在`Firstname`列...
首先,我们需要理解何时适合使用位图索引。位图索引通常适用于那些具有少量重复值的列,例如性别、民族或出生地等。如果基数小于表记录总数的2%,或者字段内容重复次数超过100次,位图索引可能是个好选择。此外,...
总之,MySQL索引优化涉及到对查询语句的理解、索引设计的合理性以及根据数据量和查询模式选择合适的索引使用策略。在实际应用中,应结合`EXPLAIN`分析、性能测试和业务需求来调整索引和查询方式,以达到最佳的数据库...
在Android开发中,"android字母索引效果"是一种常见的用户界面设计,用于帮助用户快速浏览和定位长列表中的项,...通过对这些代码的学习和理解,开发者可以更好地掌握在Android应用中实现字母索引效果的方法和技术。
SQL Server中的索引是数据库性能优化的关键因素,主要分为聚集...理解这一点对于优化查询性能和设计高效索引策略至关重要。在实际应用中,合理地创建和使用聚集与非聚集索引,可以显著提升SQL Server数据库的查询效率。
为了更好地理解这一点,我们可以通过一个具体的例子来深入探讨。 假设有一个用户表 `t_user` 包含如下字段: - `CNO` (用户编号) - `FNAME` (名) - `LNAME` (姓) - `CITY` (居住城市) 表结构如下所示: ```sql ...
MySQL索引是帮助数据库高效获取...通过理解索引的数据结构和算法原理,以及索引在不同存储引擎中的实现方式,开发者和数据库管理员可以更加高效地设计数据库结构,优化数据查询,最终提升数据库的性能和数据检索效率。
在Oracle中,除了GROUP BY操作,其他情况下NULL值被认为是不相等的,因此在创建唯一索引时,必须考虑到这一点,可能需要额外的处理来确保唯一性。 分区是大型数据库中提高查询效率的另一种策略。通过将大表划分为较...
为了实现这一点,开发人员需要处理以下几个关键技术点: 1. **数据结构与排序**:首先,应用中的数据(如联系人姓名或应用名称)需要存储在一个已排序的列表中。这通常涉及到对原始数据的预处理,以确保按字母顺序...
理解这一点有助于分析查询计划,评估实际的I/O成本。 综上所述,正确理解和使用索引对于SQL Server的查询性能至关重要。开发者需要深入了解索引的工作原理,包括它们如何被查询优化器利用,以及何时可能出现性能...
标题中的"google.rar_索引 JavaScript"提示我们这个压缩包包含了一个使用JavaScript编写的与Google搜索引擎API相关的项目。...学习这个项目将有助于提升对JavaScript编程、API交互和前端开发的理解。
4. 使用覆盖索引,将所有查询所需列包含在索引中,减少对数据页的访问,提高查询速度。 5. 创建适量的索引,过多的索引会影响写操作的性能,应根据实际查询需求合理设置。 总的来说,理解SQL Server索引的工作原理...
了解并正确设置隔离级别对避免并发问题至关重要。 10. `show engine innodb status`解读 该命令输出InnoDB引擎的详细状态,包括锁定信息、内存使用和事务状态,有助于诊断和解决问题。 11. InnoDB引擎详解 InnoDB...
理解这一点对于优化SQL查询性能至关重要。 首先,让我们回顾一下MySQL中的索引。索引是一种特殊的数据结构,它允许数据库快速查找和访问数据,类似于书的目录。对于包含`IN`的查询,如果查询的列上有索引,MySQL...
创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。然后,使用Document类表示要索引的数据,Field类...
《托马斯大学微积分--习题解答&索引》是一个针对微积分学习者的宝贵资源,其中包含了详尽的习题解答和一个方便的索引,帮助学生深入理解和掌握微积分的基本概念、理论以及应用。这个压缩包由两个主要部分组成:习题...
通过这个例子,我们可以了解到,在使用pandas进行数据处理时,对层级索引的处理是非常重要的。掌握好这一点,可以让我们更加方便地从复杂的数据中提取我们需要的信息。同时,通过对这些数据的处理,我们可以更好地...
首先,要理解MySQL中索引的作用。索引是数据库管理系统中用来提高数据检索速度的数据结构。索引可以减少查询中需要扫描的数据量,从而提高查询效率。MySQL中的索引主要类型包括BTREE、HASH、FULLTEXT和空间数据索引...