首页
学习
活动
专区
工具
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

MySQL诊断调优常用SQL

在很多时候,我们需要通过SQL语句来查看MySQL执行SQL情况,例如查看SQL执行队列,是否存在慢查询等等。...先看下基础配置,监控mysql执行sql语句需要先开启相关日志 linux系统 可以在/etc/mysqld中添加如下: 指定日志路径 log =/usr/local/mysql/mysql.log...mysql_log.sql" (这里路径自定义即可) 然后,重新启动mysql,就可以实时看到myql服务器当前正在执行语句了。...常用SQL,用于诊断排查问题 注:下列SQL在执行时,可能还需要你开启MySQL相应配置项,请根据提示进行配置 1....查看某条sql各阶段执行时间,可开启profiling功能 set global profiling=on; 其他,大家可以去搜索下,更多SQL性能分析、调优方面的常用语句 大家可以自己动手去试试上面的语句

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

    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

    元认知片言只 No.87

    最近逐渐发现,认知是一件很好玩很好玩东西。它有时候能助你跃迁,有时候也能拖住你,让你身陷自己自以为自己很厉害自我想象中。这就是认知威力。...认知升级,在我看来,并不是某些人靠只言片语,只靠一语言就可以告诉你。而是你不断去探索,不断求知,不断研究过程。 提高自己提高认知认知,也叫元认知,是你提升自己必备技能。...现在聊聊几个元认知必备必须了解片言只。...机会成本对商业公司来说,可以是利用一定时间或资源生产一种商品时,而失去利用这些资源生产其他最佳替代品机会就是机会成本。 做一些选择是有成本,因为你未来是拥有无限可能。...4、观察能力 这里观察不是对外界观察,而是对自己观察。每隔一段时间,抽出时间,以局外人身份从远处看看自己,正在做事情,正在进行思考,正在学习东西。相信我你会发现一切变得很清晰。

    63980

    三言两记录mysql for update锁

    FOR UPDATE 中文直译意思是:用于更新。...理解:这次查询数据我要用于更新操作,所以麻烦Mysql帮我加锁,其他进程在我更新完成之前不能发起for update请求(可以发起普通select请求, 用于前端展示) 用途:防止高并发情况下,比如用户连续快速点击两次购买...,导致商品数量超卖 为负数等情况 必要条件 mysql innodb引擎 在事务中启用for update(直到commit 或者rollback 此次更新操作结束 释放锁) mysql暂无for update...nowait 需要封装,增加控制超时时间逻辑,这样子伪nowait select命中索引或者主键,则为行锁,没有命中则为表锁(需要注意 避免影响业务) 测试步骤 1.一个连接A 发起事务,执行select...testNowait(){ // 执行sql 超时时间更改为0.5s // 执行for update // 0.5s后则返回失败(默认可能长达1分钟) // 恢复为默认超时时间

    1.6K10

    博士难题

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

    85310

    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

    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

    关于 MySQL索引注意

    索引 其实数据库中数据是按页存放 其实索引也是按页存放 所以本质上索引也占硬盘空间(以最小消耗,换取最大利益) 索引是一种有效组合数据方式!...作用: 大大提高数据库检索速度 改善数据库性能 MySQL索引存储类型分类   01.B-树索引:InnoDB,MyISAM均支持   02.哈希索引 其实索引是把双刃剑(利弊共存),如果使用不当,反而会降低索引性能...06.空间索引:对空间数据类型列建立索引 ■按照下列标准选择建立索引列 频繁搜索列 经常用作查询选择列 经常排序、分组列 ,经常用作连接列(主键/外键) ■请不要使用下面的列创建索引 仅包含几个不同值列...  01.经常被查询列   02.经常用作选择列   03.经常排序,分组列   04.经常用作连接列(主键/外键) 使用索引时注意事项:   01.查询时减少使用*返回全部列,不要返回不需要列...02.索引尽量要少,在字节数小列上建立索引!   03.where字句中有多个条件表达式时候,包含索引列要放在其他表达式之前!   04.在order by句中避免使用表达式!

    32820

    MySQL必须知道

    MySQL已经成为世界上最受欢迎数据库管理系统之一,无论是用在小型开发项目上,还是用在构建那较大型网站,MySQL都用实力证明了自己是一个稳定、可靠、快速、可信系统,足以胜任任何数据存储业务需要...使用过程中,这些你都知道吗? 1.必须使用InnoDB存储引擎 有更好CPU和IO性能,更好备份和锁表机制,提高统计和调试效率。...b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录复杂性;同等条件下,表中有较多空字段时候,数据库处理性能会降低很多。...因为MySQL优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到索引来进行评估,以生成出一个最好执行计划,如果同时有很多个索引都可以用于查询,就会增加MySQL优化器生成执行计划时间,同样会降低查询性能...(5)禁止使用OR条件,必须改为IN查询 理由:旧版本MysqlOR查询是不能命中索引,即使能命中索引,为何要让数据库耗费更多CPU帮助实施查询优化呢?

    69230

    MySQL引擎和视图

    - MySQL引擎 - 一.MySQL存储MyISAM与InnoDB区别 存储引擎Storage Engine:MySQL数据、索引以及其他对象是如何存储,是一套文件系统实现。...二.常用存储引擎有以下 InnoDB引擎:InnoDB引擎提供了对数据库ACID事务支持。并且还提供了行级锁和外键约束。它设计目标就是处理大数据容量数据库系统。...MyIASM引擎(原本MySQL默认引擎):不提供事务支持,也不支持行级锁和外键。 MEMORY引擎:所有的数据都在内存中,数据处理速度快,但是安全性不高。...- MySQL视图 - 一.为什么要使用视图?什么是视图? 为了提高复杂SQL语句复用性和表操作安全性,MySQL数据库管理系统提供了视图特性。...视图特点如下: 视图列可以来自不同表,是表抽象和在逻辑意义上建立新关系。 视图是由基本表(实表)产生表(虚表)。 视图建立和删除不影响基本表。

    99620

    MySQL几个知识

    MySQL几个知识 今天上班没搞什么新东西,所以简单写点儿MySQL相关tip,希望对大家有所帮助吧,如果你恰好了解这些功能,那权当我没说过。...5、--fields-enclosed-by=\" 字段引号; 6、--fields-terminated-by=, 字段分割符; 这里有几个需要注意: a、使用用户需要有select...和file权限 b、到处目录必须让mysql用户有写权限 c、该操作只能在服务器本地进行,不能远程进行 d、可以结合-w参数,设置条件来过滤出想要到处记录 2、MySQL8.0版本支持一个用户使用两个密码...这个是另外一个同事发现,在MySQL8.0.14版本,可以查看官方文档,支持同时存在两个密码,大概讲一下逻辑: 我们知道,mysql中可以使用alter user语法来修改密码,例如要将...4、MySQL explain analyze 这也是MySQL8.0新功能,它是用来分析和理解查询如何执行,可以理解为一个对explain功能完善吧。

    78020

    C语言(跳转语句中流氓)

    拓展: goto语句一般语法规则如下: ? 从上面的代码看到goto语法很简单,就是直接跳转到指定标签处,所谓标签(如例子中label)指的是后面带一个冒号标识符。...要注意一下,goto这种跳转是“无条件”跳转,也就是说goto跟标签之间可以跨越代码块,从而破坏其中栈逻辑,对goto就像一个没节操又有能力流氓,因此我们不到万不得已,别用它。 辣么!...那就是我们程序出错了快死了!那就用goto直接跳转到出错处理代码,这样既省心省力,又不用担心破坏了原有程序逻辑结构(因为程序都快死了)。比如: ? ?...点击“阅读原文”进林老师唯一官微,挑选属于你利器,跟技术死磕到底!

    76820

    SQL语句中existsnot exists用法分析

    解法1:利用exists 首先取Student表中一个元组,然后在SC表中依次找SC.Sno=该元组Sno,并且对应Cno='1',如果存在,则外层查询where子句返回为真,则Student表中该元组可以输出...,没有一门课程是他不选修。...查找过程: 首先,选取Student表中一个元组,然后在依次判断Course表中每个元组是否可以输出,只要有一个课程可以输出,则最外层查询where子句返回为false;而在判断某个课程是否可以输出时...,则要利用第三层查询,利用当前学号和当前课程号,在SC表中查询,如果存在,则第二层查询where子句返回false。...至此,每一门课程都不可以输出时,这个学号对应元组才可以输出。表示这个学生选修了全部课程。 例4:至少选修了学生200215122选修全部课程学生号码。

    3.1K30

    explain语句中type字段具体解释

    eq_ref:当连接使用索引为主键和唯一时会出现。 ref:使用普通索引 = 或 运算符进行比较将会出现。 fulltext:使用全文索引。...ref_or_null:跟 ref 类型类似,只是增加了 null 值判断,实际用不多。语句为 where name = ‘kaka’ and name is null,name 为普通索引。...index_merge:查询语句使用了俩个以上索引,常见在使用 and、or 会出现,官方文档将此类型放在 ref_or_null 之后,但是在很多情况下由于读取索引过多性能有可能还不如 range...unique_subquery:用于 where 中 in 查询,完全替换子查询,效率更高。...range:索引范围查询,常见于使用 =,,>,>=,,BETWEEN,IN() 或者 like 等运算符查询中。

    87520
    领券