【数据库摘要】5_Sql_IN

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

时间: 2024-11-14 12:26:36

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

【数据库摘要】7_Sql_Outer_Join

介绍一个list滑动时通过一个text提示Array首字母位置的应用 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a

【数据库摘要】10_Sql_Create_Index

CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只能被用来加速搜索/查询. 注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引. SQL CREATE INDEX 语法 在表上创建一个简单的索引.允许使用重复的值

【数据库摘要】8_Sql_Union

背景 Android kitkat 默认已经支持 Ethernet 有线网络,只要稍微配置,便可以直接使用,测试结果,网络浏览器和下载都没有没有问题,而且系统可以做到与 wifi 共存,互相不影响功能,这里简单介绍如何使能 Ethernet,并简要分析其代码和流程. Linux 配置部分 Linux 需要能够支持有线网络,生成 eth 网络设备节点. Android 配置 overlay 主要是 overlay 里面添加 Ethernet 网络类型支持:  frameworks/base/cor

【数据库摘要】9_Sql_Select_Into

SELECT INTO 语句 通过 SQL,您可以从一个表复制信息到另一个表. SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中. SQL SELECT INTO 语法 我们可以复制所有的列插入到新表中: SELECT * INTO newtable [IN externaldb] FROM table1; 或者只复制希望的列插入到新表中: SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;

【数据库摘要】6_Sql_Inner_Join

INNER JOIN 操作符 INNER JOIN keyword在表中存在至少一个匹配时返回行. SQL INNER JOIN 语法 SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name; 或: SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_nam

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

SQL 存储过程 存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (推断条件) then Select 列名 into 变量2 from 表A where列名=param1

分享一篇朋友写的关于共享性数据库的文章

原文地址:http://www.cnblogs.com/cloud_china/p/3799907.html 剖析云平台中的“共享型数据库” 摘要: 随着云计算的出现,出现了很多新的名词,像弹性扩容,平缓迁移,资源隔离等.目前我就“共享型数据库”做一下解释,下面就以京东云擎的云数据库为例,给大家剖析什么叫“共享性数据库”.  这个是我第一篇帖子,我首先自我介绍一下,我从事IT行业10年,在多年以前是一名架构师,现在在一家互联网企业做产品经理,下面的仅仅是因为个人与行业一些从业人员交流得到的心得以

OSPF学习中的问题

OSPF对接两方,对设置的要求,哪些参数必须相同 (HELLO &dead interval, area ID, authentation, 末节区域(option中的E位), network mask) 末梢区域中E位为0,此位不相同,不能建立邻接关系 Hello interval 和 hello timer 的区别(timer初始值就是interval,当超时后,就发送hello) 在DR others上,Show OSPF neighbor,能看到其他DR others吗(可以看到,知道网

Mongodb 笔记07 分片

分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 存储更多的数据,处理更大的负载. 2. MongoDB支持自动分片(autosharding),可以使数据库架构对应用程序不可见,也可以简化系统管理.对应用程序而言,好像始终在使用一个单机的MongoDB服务器一样.另一方面, mongoDB自动处理数据在分片上的分布,也更容易添加和删除分片技术.