iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql可以用什么代替in
  • 883
分享到

mysql可以用什么代替in

2024-04-02 19:04:59 883人浏览 泡泡鱼
摘要

这篇文章主要介绍Mysql可以用什么代替in,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql中用exists代替in;exists对外表用loop逐条查询,每次查询都会查看e

这篇文章主要介绍Mysql可以用什么代替in,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

mysql中用exists代替in;exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当exists里的条件语句能够返回记录行时,条件就为真,返回当前loop到的这条记录。

exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条 件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 false

如下:

select * from user where exists (select 1);

对user表的记录逐条取出,由于子条件中的select 1永远能返回记录行,那么user表的所有记录都将被加入结果集,所以与 select * from user;是一样的

又如下

select * from user where exists (select * from user where userId = 0);

可以知道对user表进行loop时,检查条件语句(select * from user where userId = 0),由于userId永远不为0,所以条件语句永远返回空集,条件永远为false,那么user表的所有记录都将被丢弃

not exists与exists相反,也就是当exists条件有结果集返回时,loop到的记录将被丢弃,否则将loop到的记录加入结果集

总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件

in查询相当于多个or条件的叠加,这个比较好理解,比如下面的查询

select * from user where userId in (1, 2, 3);

等效于

select * from user where userId = 1 or userId = 2 or userId = 3;

not in与in相反,如下

select * from user where userId not in (1, 2, 3);

等效于

select * from user where userId != 1 and userId != 2 and userId != 3;

总的来说,in查询就是先将子查询条件的记录全都查出来,假设结果集为B,共有m条记录,然后在将子查询条件的结果集分解成m个,再进行m次查询

值得一提的是,in查询的子条件返回结果必须只有一个字段,例如

select * from user where userId in (select id from B);

而不能是

select * from user where userId in (select id, age from B);

而exists就没有这个限制

下面来考虑exists和in的性能

考虑如下sql语句

1: select * from A where exists (select * from B where B.id = A.id);

2: select * from A where A.id in (select id from B);

查询1.可以转化以下伪代码,便于理解

for ($i = 0; $i < count(A); $i++) {
  $a = get_record(A, $i); #从A表逐条获取记录
  if (B.id = $a[id]) #如果子条件成立
    $result[] = $a;
}
return $result;

大概就是这么个意思,其实可以看到,查询1主要是用到了B表的索引,A表如何对查询的效率影响应该不大

假设B表的所有id为1,2,3,查询2可以转换为

select * from A where A.id = 1 or A.id = 2 or A.id = 3;

这个好理解了,这里主要是用到了A的索引,B表如何对查询影响不大

下面再看not exists 和 not in

1. select * from A where not exists (select * from B where B.id = A.id);

2. select * from A where A.id not in (select id from B);

看查询1,还是和上面一样,用了B的索引

而对于查询2,可以转化成如下语句

select * from A where A.id != 1 and A.id != 2 and A.id != 3;

可以知道not in是个范围查询,这种!=的范围查询无法使用任何索引,等于说A表的每条记录,都要在B表里遍历一次,查看B表里是否存在这条记录

故not exists比not in效率高

mysql中的in语句是把外表和内表作hash 连接,而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列的索引。

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'

的结果是相同的。

以上是mysql可以用什么代替in的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: mysql可以用什么代替in

本文链接: https://www.lsjlt.com/news/52178.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql可以用什么代替in
    这篇文章主要介绍mysql可以用什么代替in,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Mysql中用exists代替in;exists对外表用loop逐条查询,每次查询都会查看e...
    99+
    2022-10-18
  • redis是否可以代替mysql
    下文主要给大家带来redis是否可以代替mysql,希望这些内容能够带给大家实际用处,这也是我编辑redis是否可以代替mysql这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。redis能代替my...
    99+
    2022-10-18
  • 可以使用什么关键字代替 MODIFY 来修改 MySQL 表的列?
    我们可以使用关键字 CHANGE 来修改现有表的列。使用 CHANGE 关键字,我们可以更改列的名称及其定义。它的语法与带有 MODIFY 关键字的 ALTER TABLE 的语法有点不同。语法Alter table table_name ...
    99+
    2023-10-22
  • SQL中有什么写法可以替代Like语句
    本篇内容介绍了“SQL中有什么写法可以替代Like语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 我们可以在 MySQL 过程中使用“IF NOT IN”吗?
    让我们首先看看 MySQL 中 IF NOT IN 的语法 -if(yourVariableName NOT IN (yourValue1,yourValue2,........N) ) then statement1 else ...
    99+
    2023-10-22
  • 用什么可以代理阿里云ip
    1. 使用代理服务器 代理服务器是一种位于客户端和目标服务器之间的中间服务器,可以通过转发客户端的请求来隐藏客户端的真实IP地址。你可以使用一些代理服务器来代理阿里云IP,例如: VPN(Virtual Private Network,...
    99+
    2023-10-27
    阿里 ip
  • SOCKS5代理IP可以干什么
    这篇文章主要介绍“SOCKS5代理IP可以干什么”,在日常操作中,相信很多人在SOCKS5代理IP可以干什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SOCKS5代理IP可以干什么”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • 是不是可以用Go替代Django和Spring的接口开发?
    随着Go语言的不断发展,越来越多的开发者开始考虑使用它来进行接口开发。相比于传统的Django和Spring框架,Go语言具有更高的性能和更好的并发处理能力。那么,是不是可以用Go替代Django和Spring的接口开发呢?本文将从多个角度...
    99+
    2023-08-29
    django 接口 spring
  • mysql数据库可以用来干什么
    mysql数据库可以用来干什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql数据库可以用来干什么MySQL是一种开放...
    99+
    2022-10-18
  • mysql什么时候可以使用索引
    这篇文章主要介绍mysql什么时候可以使用索引,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!            &nb...
    99+
    2022-10-18
  • 云服务器cvm实例的计费模式有哪些功能可以用什么代替
    按小时计费模式 这种计费模式适用于需要实时处理大量数据的云服务器Cvm实例。对于那些需要实时响应用户请求的云服务器Cvm实例,这种计费模式可以提供更高的灵活性和成本效益。例如,对于一些需要高并发的应用程序,如Web服务器或数据库服务器...
    99+
    2023-10-28
    可以用 实例 模式
  • mysql中in的作用是什么
    本篇内容介绍了“mysql中in的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 为什么说OceanBase在关键领域不可能替代Oracle
    2019 年 10 月 9 日,某部委人士在公开会议上指出, “ OceanBase 测试指标虽高,但在关键领域仍不能使用” 、“ 互联网和银行场景完全不同” 、“ 不能支持跑批(批处理业务) ” 。问题...
    99+
    2022-10-18
  • MySQL为什么临时表可以重名
    目录临时表的特性临时表的应用为什么临时表可以重名?临时表和主备复制主库上不同的线程创建同名的临时表是没关系的,但是传到备库执行是怎么处理的呢?今天我们就从这个问题说起:临时表有哪些特...
    99+
    2022-11-13
  • 什么时候可以考虑使用MySQL MEMORY引擎
    通常使用MEMORY涉及到以下特性: 1.操作相关的短暂的,非重要数据的管理或者cache,当MySQL进程夯住或服务重启,MEMORY表的数据就会丢失。 2.内存存储访问快速,并且延迟低。数据可以填充到内...
    99+
    2022-10-18
  • 有什么办法可以获取代理ip
    这篇文章主要讲解了“有什么办法可以获取代理ip”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有什么办法可以获取代理ip”吧!很多人都想用ip,有很多方法,比如,我们去找免费的ip,当然这种方...
    99+
    2023-06-20
  • 为什么查询ElasticSearch用SQL代替DSL
    这篇文章主要讲解了“为什么查询ElasticSearch用SQL代替DSL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么查询ElasticSearch...
    99+
    2022-10-18
  • 什么情况下可以用免费代理服务ip
    这篇文章主要讲解了“什么情况下可以用免费代理服务ip”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么情况下可以用免费代理服务ip”吧!通常在网络上使用代理服务器,能在哪里看到它们起作用?许...
    99+
    2023-06-20
  • mysql中mysql-bin.000001是什么文件可以删除吗
    用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001、mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作...
    99+
    2022-10-18
  • MySQL中有什么函数可以获取特定字符的数字代码
    MySQL中有以下函数可以获取特定字符的数字代码:1. ASCII(str):返回字符串str的第一个字符的ASCII码值。...
    99+
    2023-10-20
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作