首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL查询语句中IN 和Exists 对比分析

那我就困惑了,因为我SQL语句里面,外表只有1W级别的数据,内表有30W级别的数据,按网上说法应该是Exists效率会比IN高,但我结果刚好相反! “没有调查就没有发言权”!...这种情况下子查询结果集很大,我们看看MySQL查询计划: 使用in时,由于子查询结果集很大,对t_author和t_poetry表都接近于全表扫描,此时对t_author表遍历耗时差异对整体效率影响可以忽略...,执行计划里多了一行,在接近全表扫描情况下,mysql优化器选择了auto_key来遍历t_author表: 使用exists时,数据量变化没有带来执行计划改变,但由于子查询结果集很大...,5.5以后MySQL版本在exists匹配查询结果时使用是Block Nested-Loop(Block嵌套循环,引入join buffer,类似于缓存功能)开始对查询效率产生显著影响,尤其针对<...网上说法不准确,即表规模不是看内部表和外部表,而是外部表和子查询结果集。 最后一点,也是最重要一点:世间没有绝对真理,掌握事物本质,针对不同场景进行实践验证才是最可靠有效方法。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    sql语句中(+)作用

    表b是工资表,有a,b,d四个员工,工资对应是1000,2000,4000。然后分别演示带(+)符号和不带(+)符号,结果如下。...1000 b 2000 d 4000 可见,带(+)号时,a表中所有人都在...不带(+)时,a表中没有出现工资为空员工c。 对(+)号解释 **(+) 表示外连接。**条件关联时,一般只列出表中满足连接条件数据。...如果条件一边出现(+),则另一边表就是主表,主表中所有记录都会出现,即使附表中有的记录为空 (+)扩展:SQL表连接 SQL表连接分类 内连接,外连接,交叉连接,其中外连接包括左连接和右连接。...a.name(+)=b.name(+) * 第 1 行出现错误: ORA-01468: 一个谓词只能引用一个外部联接

    1.3K10

    Python 条件语句中elif

    条件语句中elif 什么是elif elif(或者如果)对于命题非第一次多种判断 , 每一种判断条件对应一组业务代码 条件语句说明 对于首次if判断不满足后 , 其他条件判断语句 用法 if...bool_result : do elif bool_result: elifdo # 当前elif语句对应语法块 elif bool_result: elifdo # 缩进等级与do语法块一致...else: elsedo 参数 elifdo : 当前elif语句对应python代码 返回值 elif属于语法 , 没有返回值 说明 条件语句中满足一个条件后 , 将退出当前条件语句 每个条件语句中仅有且必须有一个...必须是第一个条件语句 练习 有一个班级,班级有很多同学,每个同学有如下信息: 名字 年龄 分数 , 现在来了一个插班生,将这个小明放到成绩单里,这里要做判断,如果班级里有小明,就说明重名了,那么要给新小明后面加个新字并存入...< number <= 10: print('number值在5和10之间') elif 5 >= number > 0: print('number值是1~5') else:

    1.3K10

    博士难题

    两面族是荒岛上一个新民族,他们特点是说话真一句假一句且真假交替。如果第一句为真,则第二句是假;如果第一句为假,则第二句就是真的,但是第一句是真是假没有规律。...迷博士遇到三个人,知道他们分别来自三个不同民族:诚实族、说谎族和两面族。三人并肩站在博士前面。 博士问左边的人:“中间的人是什么族?”,左边的人回答:“诚实族”。...博士问中间的人:“你是什么族?”,中间的人回答:“两面族”。 博士问右边的人:“中间的人究竟是什么族?”,右边的人回答:“说谎族”。 请问:这三个人都是哪个民族?...c && cc  1、右边是诚实族,中间是说谎族  2、右边是说谎族,中间是诚实族或者两面族 3、右边是两面族 #include /** * * 迷博士难题(2) 两面族是荒岛上一个新民族...* 如果第一句为真,则第二句是假;如果第一句为假,则第二句就是真的,但是第一句是真是假没有规律。 迷博士遇到三个人,知道他们分别来自三个不同民族:诚实族、说谎族和两面族。

    85810

    SQL语句中 where 和 on 区别

    先说结论: 在使用left join左连接时,on and和on where条件区别如下: 1、on条件是在生成临时表时使用条件,它不管on中条件是否为真,都会返回左边表中记录。...2、where条件是在临时表生成好后,再对临时表进行过滤条件。...这时已经没有left join含义(必须返回左边表记录)了,条件不为真的就全部过滤掉,on后条件用来生成左右表关联临时表,where后条件对临时表中记录进行过滤。...这下看出来不对了,id为4记录还在,这是由left join特性决定,使用left join时on后面的条件只对右表有效(可以看到右表id=4记录没了)。...where过滤作用就出来了,右连接原理是一样。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on区别?

    3.1K20

    sqrt mysql_MySQLSQRT函数使用方法「建议收藏」

    推荐:MySQLSUM函数使用教程这篇文章主要介绍了MySQLSUM函数使用教程,是MySQL入门学习中基础知识,需要朋友可以参考下 MySQLSUM函数是用来找出记录中各种字段总和。...现在,假设根据上面的表想来计算所有的dialy_typing_pages总数 这篇文章主要介绍了详解MySQLSQRT函数使用方法,是MySQL入门学习中基础知识,需要朋友可以参考下 MySQL...可以使用SELECT语句找出方检定根任意数如下: ? 所看到浮点值,因为内部MySQL将处理浮点数据类型平方根。 可以使用SQRT函数,计算出记录平方根。...分享:101个MySQL调试和优化技巧副标题#e# MySQL是一个功能强大开源数据库。随着越来越多数据库驱动应用程序,人们一直在推动MySQL发展到它极限。...这里是101条调节和优化MySQL安装技巧。一些技巧是针对特定安装环境,但这些思路是通用

    65220

    MySQL子查询基本使用方法(四)

    上节课我们给大家介绍了MySQL分组查询与聚合函数使用方法,具体可回顾MySQL分组查询与聚合函数使用方法(三)。本节课我们将介绍where条件查询中IN关键字子查询使用方法。...在MySQL中,子查询我们也称为嵌套查询。并且子查询语句一般放在条件查询关键词where之后,其基本语法结构如下。...【任务1】查找使用华为手机乘客编号,姓名、性别以及年龄信息。需要结合使用titanic以及phone两个表信息,通过IN子查询实现。...结合以上三个案例,聪明同学应该看出来了,能将titanic、phone两个表联系起来关键在于主键PassengerId,如果两个表中没有PassengerId这个主键字段,我们就无法实现以上子查询...好了,今天内容介绍到这里。下节课开始,我们将给大家介绍MySQL中非常常用多表联合查询以及子查询与多表联合查询区别,敬请期待! ---- 想学习更多数据分析、数据挖掘干货知识,请关注公众号

    1.5K10

    mysql中FIND_IN_SET使用方法

    mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值记录,但是它也不是用like能解决,使用like可能查到我们不想要记录,它比like更精准,这时候mysqlFIND_IN_SET...FIND_IN_SET(str,strlist)函数 str 要查询字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)结果,返回结果为...下面查询btype字段中包含”15″这个参数值 SELECT * from test where FIND_IN_SET('15',btype) 返回值 下面查询btype字段中包含”5″这个参数值...SELECT * from test where FIND_IN_SET('20',btype) 当然它返回值为null,因为字段中没有这个值 FIND_IN_SET和like区别 like是广泛模糊匹配...,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询结果要小于like查询结果。

    23510

    mysql分区表_MySQL分区表正确使用方法

    大家好,又见面了,我是你们朋友全栈君。 MySQL分区表概述 我们经常遇到一张表里面保存了上亿甚至过十亿记录,这些表里面保存了大量历史记录。...对于这些历史数据清理是一个非常头疼事情,由于所有的数据都一个普通表里。所以只能是启用一个或多个带where条件delete语句去删除(一般where条件是时间)。 这对数据库造成了很大压力。...即使我们把这些删除了,但底层数据文件并没有变小。面对这类问题,最有效方法就是在使用分区表。最常见分区方法就是按照时间进行分区。 分区一个最大优点就是可以非常高效进行历史数据清理。 1....确认MySQL服务器是否支持分区表 命令: show plugins; 2....MySQL分区表特点 在逻辑上为一个表,在物理上存储在多个文件中 HASH分区(HASH) HASH分区特点 根据MOD(分区键,分区数)值把数据行存储到表不同分区中 数据可以平均分布在各个分区中

    3.2K20
    领券