in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
如果两个表中一个较小,一个是大表,则子查询表大的用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列的索引。
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
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'
的结果是相同的。
分享到:
相关推荐
in和exist的区别 从sql编程角度来说,in直观,exists不直观多一个select, in可以用于各种子查询,而exists好像只用于关联子查询 从性能上来看 exists是用loop的方式,循环的次数影响大,外表要记录数少,内表就...
且看接下来的具体分析:in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。 如果两张表大小差不多,那么exists和in的效率差不多。 例如: 一张大表为A,一张小表B...
MySQL中的`EXISTS`和`IN`都是在SQL查询中用来检查某条记录是否符合特定条件的子查询操作符,但它们的工作原理和使用场景有所不同。 `EXISTS`子查询主要检查子查询是否能返回至少一行数据。在这个过程中,子查询的...
通过以上分析可以看出,虽然 `NOT EXISTS`、`NOT IN` 和 `NOT NULL` 在表面上看似相似,但它们之间存在着明显的区别,尤其是在处理 `NULL` 值时。因此,在实际应用中,应根据具体需求选择合适的操作符以达到最佳效果...
命令和参数之间必需用空格隔开,参数和参数之间也必需用空格隔开。 一行不能超过256个字符;大小写有区分。 二、特殊字符含义 文件名以“.”开头的都是隐藏文件/目录,只需在文件/目录名前加“.”就可隐藏它。...
例如,"It was said that this was the only copy of the book in existence." 中的 "in existence" 意为现存的,"existence" 是 "exist" 的名词形式。另外,"He claimed to have discovered a new planet." 中的 ...
本单元涉及的词汇有:summary(总结)、respond(答复)、decrease(减少)、free of charge(免费)、appoint(委派)、continent(洲)、overcome(克服)、operate(操作)、exist(存在)、reward(回报)。...
Sample:@Rem Here is the description. 5.Pause 命令 运行 Pause 命令时,将显示下面的消息: Press any key to continue . . . Sample: @echo off :begin copy a:*.* d:back echo Please put a new disk...
了解这些动词短语的区别有助于正确表达场景。 3. 连词辨析:"as well as" 表示“既...又...”,"besides" 表示除...之外还,"but" 表示转折,"except" 表示除了...。这里 "as well as" 强调前后两个形容词都适用。 ...
(Which method must exist in every Java application?) 答案是main方法。在Java中,程序的执行总是从main方法开始。main方法的签名必须是`public static void main(String[] args)`。 2. Java中字符串连接操作符...
与array_key_exists()的区别在于,isset()用来判断变量是否设置,而不是用来判断数组中是否有某个键名。另外,isset()能快速地检查变量是否已定义且非NULL值,它不会产生Notice错误。但是,isset()对值为NULL、空...
### Django ORM 中 `objects.all()`、`objects.get()` 与 `objects.filter()` 的区别 在 Django 的 ORM(Object-Relational Mapping)操作中,我们经常需要用到 `objects.all()`、`objects.get()` 和 `objects....
- 第七题考查形容词辨析,“common”(常见的)和“ordinary”(普通的)区别,这种舞蹈节目在电视上很常见,对普通年轻人有吸引力,选C。 - 第八题考查倒装句,“Next to it is another hotel”是地点状语前置的...
PostgreSQL提供了多种字符类型,如`char`, `varchar`, `text`等,它们之间的区别主要在于固定长度、可变长度和存储方式等方面。 #### 36. 我怎样创建一个序列号或是自动递增的字段? 使用`serial`或`bigserial`...
更新说明: 2017-02-04(yaya) Ls command: Empty Folder returns false. 2016-12-08(yaya) 修正lz4、vhd不显示解压缩进度指示。增加lzma解压缩进度指示。 2016-11-09(不点) 0x8205 bit 5 = 1: 使checkkey...
【装饰器@staticmethod和@classmethod有什么区别?】 - `@staticmethod`:不接收 `self` 参数,与类或实例无关,常用于封装与类逻辑关联但不需要访问类属性或实例属性的方法。 - `@classmethod`:接收第一个参数为类...
#### `a.Equals(b)`和`a == b`之间的区别 `a.Equals(b)`和`a == b`都是用来比较两个对象是否相等,但是它们之间有一些重要的区别: - `a == b`:主要用于比较基本数据类型(如int、double等)的值是否相等。对于...
左外连接与右外连接的区别 11. 使用下列( )命令可以使结果表中除了匹配行外,还包括右表有的但左表中不匹配的行。 a) LEFT OUTER JOIN b) NATURAL JOIN c) RIGHT OUTER JOIN d) INNER JOIN **答案解析**: *...
'和"引号有什么区别? 单引号`'`不会对变量进行展开,而双引号`"`会进行变量展开。 **示例**: ```bash var="world" echo 'Hello, $var' # 输出: Hello, $var echo "Hello, $var" # 输出: Hello, world ``` #### 30...
(a class is designed with a single, well-focoused purpose. 应该不止这点) command n. 命令,指令 [kә'mɑ:nd](指挥, 控制) (command-line 命令行) Comments [java] 文本注释 ['kɒments] compile [java] v....