in 和 exists区别
in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。
一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
带in的关联子查询是多余的,因为in子句和子查询中相关的操作的功能是一样的。如:
select staff_name from staff_member where staff_id in
(select staff_id from staff_func where staff_member.staff_id=staff_func.staff_id);
为非关联子查询指定exists子句是不适当的,因为这样会产生笛卡乘积。如:
select staff_name from staff_member where staff_id
exists (select staff_id from staff_func);
not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。
所以无论哪个表大,用not exists都比not in要快。
尽量不要使用not in子句。使用minus 子句都比not in 子句快,虽然使用minus子句要进行两次查询:
select staff_name from staff_member where staff_id in (select staff_id from staff_member minus select staff_id from staff_func where func_id like '81%');
in 与 "=" 的区别
select name from student where name in ('zhang','wang','li','zhao');
与
select name from student where name='zhang' or name='li' or name='wang' or name='zhao'
的结果是相同的。
分享到:
相关推荐
数据库初学者必备宝藏
以下是对标题和描述中涉及的Oracle数据库知识的详细说明: 1. **创建表**:创建表是数据库的基础操作,示例中展示了如何定义字段类型和约束。`CREATE TABLE`语句用于创建新表,如`CREATE TABLE 表名 (字段1 数据...
"数据库面试知识点汇总" 数据库面试知识点汇总是对数据库方方面面的总结,涵盖了数据库设计、数据库范式、索引、数据库性能优化等方面的知识点。下面是对这些知识点的详细解释: 一、数据库设计 数据库设计是指对...
这个压缩包“数据库复习要点(数据库知识点总汇).gz”显然包含了对数据库基础知识的全面总结,旨在帮助学习者巩固和理解这一领域的关键概念。以下是根据标题和描述提炼出的一些主要知识点: 1. **数据库基本概念**...
数据库原理是IT领域中至关重要的知识点,涉及到数据的组织、存储和管理,是现代信息技术的基石之一。以下是对给定文件中的数据库原理知识点的详细解析: ### 一、数据库概念 1. **数据**:数据库中存储的基本元素...
华北电力大学的数据库课程涵盖了数据库的基础概念和核心知识。以下是对这些知识点的详细解释: 1. **数据库**:数据库是一个长期存储在计算机内的、有组织的、可共享的大规模数据集合。它按照特定的数据模型组织、...
"数据库原理知识汇总1" 数据库原理知识汇总1中涵盖了数据库设计、数据库基础知识、数据管理技术的发展、实体及属性、概念模型、数据模型、数据库系统结构、数据库管理系统等方面的知识点。 首先,在数据库设计中,...
总结来说,数据库知识涵盖数据的基本概念、数据库的特性和管理、DBMS的功能以及数据模型的构建。理解和掌握这些知识点对于理解和使用数据库至关重要,无论是进行数据库设计、开发应用程序还是进行数据管理,都能提供...
数据库是存储和管理数据的系统,它为用户提供了一种有组织的方式来访问和操作大量信息。在数据管理技术的发展历程中,数据库系统阶段是最先进的,它提供了最高的数据独立性,这意味着应用程序不受底层数据存储方式的...
计算机二级考试Access数据库知识点汇总主要涵盖了数据库基础知识、数据库设计、SQL语句操作以及VBA编程等方面的内容。这些知识点对于准备参加计算机二级考试的考生来说至关重要,是考试的核心和基础。下面将对这些...
总而言之,这个“数据库相关思维导图汇总”涵盖了数据库领域的广泛知识,从基础理论到实践应用,从传统的关系型数据库到现代的数据库解决方案。对于学习者来说,通过这样的思维导图,可以更直观、系统地理解和记忆...
SQL数据库知识点汇总 本文将总结常用 SQL 数据库知识点,包括创建数据库、删除数据库、备份数据库、创建新表、删除表、增加列、创建索引、创建视图、基本 SQL 语句、 高级查询运算词、外连接、分组等内容。 一、...
计算机二级考试Access数据库知识点汇总 本文档汇总了计算机二级考试Access数据库相关的知识点,涵盖了算法、数据结构、数据库管理系统、数据模型、排序算法、树形结构、程序设计等方面的重点内容。 一、算法 * ...
数据库基础知识汇总 一、数据库基础概念 1. 数据库(Database):是一个长期存储和管理数据的仓库,旨在提供高效、可靠的数据存储和访问服务。 2. 数据库管理系统(DBMS):是一个软件系统,用于定义、创建、维护...
Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它提供了丰富的功能和高效的数据管理能力。这篇笔记主要涵盖了Oracle数据库的安装、体系结构以及基本操作,包括创建和管理表空间、用户、数据类型以及表。 ...
【计算机二级考试Access数据库知识点汇总】 Access数据库是微软公司推出的一种关系型数据库管理系统,它在IT领域中的应用广泛,尤其适合小型企业或个人用于数据管理。掌握Access数据库的知识点对于通过计算机二级...
Excel VBA 所有的表 统治管理 查看知识汇总 Excel VBA数据库表管理查看知识汇总工具
Michael Stonebraker,一位数据库领域的大师,为我们带来了他的知识结晶——数据库系统的知识汇总。这个汇总不仅包括了传统关系数据库系统的基础知识,还涵盖了现代数据库系统的新架构和技术。在这些内容中,我们...