IN 操作符

IN 操作符同意您在 WHERE 子句中查找多个值。

SQL IN 语法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

IN 操作符实例

(使用Northwind样本数据库) SELECT * FROM Customers WHERE City IN ('Paris','London');

MongoDB 语法

db.collection.find( { type: { $in: [ 'food', 'snacks' ] } } )

EXISTS

NOT EXISTS,exists的使用方法跟in不一样,一般都须要和子表进行关联,并且关联时,须要用索引,这样就能够加高速度

exists是用来推断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来觉得exists比in效率高的说法是不准确的。

假设查询的两个表大小相当,那么用in和exists区别不大。

假设两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

比如:表A(小表),表B(大表)

  • 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列的索引。

  • 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要快。

你也能够訪问:http://txidol.github.io 获取很多其它的信息

【数据库摘要】5_Sql_IN的更多相关文章

  1. 【数据库摘要】10_Sql_Create_Index

    CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下.索引使数据库应用程序能够更快地查找数据. 索引 您能够在表中创建索引,以便更加高速高效地查询 ...

  2. 【数据库摘要】4_Sql_Like

    SQL LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. SQL LIKE 语法 SELECT column_name(s) FROM table_name WHERE ...

  3. 【数据库摘要】6_Sql_Inner_Join

    INNER JOIN 操作符 INNER JOIN keyword在表中存在至少一个匹配时返回行. SQL INNER JOIN 语法 SELECT column_name(s) FROM table ...

  4. 【数据库摘要】12_Sql_存储过程

    SQL 存储过程 存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); ...

  5. 如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库

    原文:如何利用[百度地图API],制作房产酒店地图?(下)--结合自己的数据库 摘要:应广大API爱好者要求,写了一篇利用自己数据库标点的文章…… -------------------------- ...

  6. MySQL学习——操作数据库

    MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...

  7. MVC系列2-Model

    上一篇我讲了ASP.MET MVC的基础概念,我相信从上一篇,我们可以知道MVC的执行过程.这一篇我们开始讲解Model.我们知道,在我们的应用程序中,大多时候是在遵循业务逻辑通过UI操作数据.所以这 ...

  8. Mongodb 笔记07 分片、配置分片、选择片键、分片管理

    分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...

  9. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

随机推荐

  1. If the server requires more time, try increasing the timeout in the server editor

    双击服务器,在overview下的Timeouts中的Start选项,改成10000或者较大就可以了.防止服务器自启动频繁.

  2. ajax 上传图片 并预览

     <img {if !$article[pic]}style="display: none"{/if} width="82" height="6 ...

  3. PrintWriter与outputStream区别

    网上截取: printWriter:我们一般用来传的是对像 而outputStream用来传的是二进制,故上传文件时,一定要使用此. PrintWriter以字符为单位,支持汉字,OutputStre ...

  4. 实时消息传输协议 RTMP(Real Time Messaging Protocol)

    实时消息传输协议(RTMP)最初是由 Macromedia 为互联网上 Flash player 和服务器之间传输音频.视频以及数据流而开发的一个私有协议.Adobe 收购 Macromedia 购以 ...

  5. Java 比较两日期相差天数

    (版本1) publicstaticint getIntervalDays(Date fDate, Date oDate) { if (null == fDate || null == oDate) ...

  6. Fedora 17配置ssh及Windows远程连接

    转载自:http://nanjingjiangbiao-t.iteye.com/blog/1794213 Fedora 23 默认已经安装好openssh server了,不用再装不过默认情况下没有开 ...

  7. .NET study collection links

    Parameter Binding in ASP.NET Web API http://www.asp.net/web-api/overview/formats-and-model-binding/p ...

  8. linux如何关闭selinux?

    首先我们可以用命令来查看selinux的状态getenforce 这个命令可以查看到selinux的状态,当前可以看到是关闭状态的.还有一个命令也可以查看出selinux的状态.sestatus -v ...

  9. cython教程

    .写测试代码: zhouhh@zhouhh-home:~$ vi test.pyx [python] view plaincopy def sayhello(char* str): if str == ...

  10. BZOJ 2761 不重复数字 (Hash)

    题解:直接使用STL中的hash去重即可 #include <cstdio> #include <map> using namespace std; int ans[50010 ...