Losse_scan/松散扫描:在执行连接的时候,半连接的表S (R semi-join S)其元组需要有序(a in select b from t,b 上存在索引,其元组的顺序按照b成分组状,则使用b上可用的索引读取元组的时候,可以按序引序把相同的值的元组有序读到),此时,根据索引拿出每组重复元组中的第一个元组(其他重复元组被读到后跳过,所以要求S的元组有序),与R表进行连接。[LosseScan:使用索引扫描,基于索引进行分组只取分组的第一条记录与外部表进行匹配;在EXPLAIN的extra字段显示LooseScan(m,n)]

select * from Country
where Country.code in (select country_code from Satellite)

假设在Satellite.country_code上有一个索引。

LooseScan策略并不需要排序,它需要的是分组。 在上图中,卫星按国家分组。 并获得没有重复的国家列表:

[world]> explain select * from Country where Country.code in (select country_code from Satellite);
+----+-------------+-----------+--------+---------------+--------------+---------+------------------------------+------+-------------------------------------+
| id | select_type | table     | type   | possible_keys | key          | key_len | ref                          | rows | Extra                               |
+----+-------------+-----------+--------+---------------+--------------+---------+------------------------------+------+-------------------------------------+
|  1 | PRIMARY     | Satellite | index  | country_code  | country_code | 9       | NULL                         |  932 | Using where; Using index; LooseScan |
|  1 | PRIMARY     | Country   | eq_ref | PRIMARY       | PRIMARY      | 3       | world.Satellite.country_code |    1 | Using index condition               |
+----+-------------+-----------+--------+---------------+--------------+---------+------------------------------+------+-------------------------------------+

LooseScan通过首先放置子查询表并使用其索引从多个重复项中选择一个记录来避免重复记录组合的产生
因此,为了使LooseScan适用,子查询应该如下所示:
expr IN (SELECT tbl.keypart1 FROM tbl ...)

expr IN (SELECT tbl.keypart2 FROM tbl WHERE tbl.keypart1=const AND ...)

LooseScan可以处理相关的子查询
LooseScan可以通过设置optimizer_switch变量中的loosescan = off标志来关闭。

LooseScan Strategy相关推荐

  1. 看懂mysql执行计划--官方文档

    原文地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 9.8.2 EXPLAIN Output Format The EXP ...

  2. mysql in 原理_深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

  3. 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

    原文链接:https://www.cnblogs.com/arthinking/p/13205303.html 相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如: 避免 select ...

  4. mysql semi join详解_MySQL中的semi-join

    http://www.linuxidc.com/Linux/2015-05/117523.htm 1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. 当 ...

  5. MySQL中的semi-join

    https://www.linuxidc.com/Linux/2015-05/117523.htm 1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. ...

  6. 【全网最全】 |MySQL EXPLAIN 完全解读

    TIPS 本文基于MySQL 8.0编写,理论支持MySQL 5.0及更高版本. EXPLAIN使用 explain可用来分析SQL的执行计划.格式如下: 1 2 3 4 5 6 7 8 9 10 1 ...

  7. 设计模式之策略模式(Strategy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  8. Strategy Analytics:物联网安全令人担忧,成本节约效益也不确定

    Strategy Analytics物联网战略研究报告<2016年物联网部署趋势及使用调查>发现,物联网安全问题令人担忧,同时,超过半数企业对物联网带来的成本节约效益也不太确定.56%的受 ...

  9. Distinction Between Strategy and Decorator

    首先看Strategy和Decorator在GoF的<Design Patterns>的intent Decorator (1)intent: Attach additional resp ...

  10. Strategy模式

    一.从订餐开始<?XML:NAMESPACE PREFIX = O /> 小王和小刘两人到餐厅点餐,两人分别如下告诉厨师. 小王:我要一杯加了香草冰淇淋的巧克力汽水. 小刘:一个黑与白. ...

最新文章

  1. 如果要存ip地址,用什么数据类型比较好?
  2. html调用相机相册案例,Ionic 相册、相机调用
  3. 第六周实践作业:软件测试和评估
  4. UIT信息容灾概论(6)
  5. Java学习四步曲,助你成长!
  6. python抓有趣的东西_Python 五个有趣的彩蛋,你都知道吗?
  7. 阿里云云计算6 ECS的概念
  8. CoreData的用法
  9. 【Python】str()函数
  10. 读取图片java_用java读取图片的三种方式
  11. C#如何在VS2015 2017版本中编写WPF UI界面引入第三方SVG图形
  12. matlab的regress函数
  13. 数字图像处理(DIP)实验4 目标颜色识别
  14. 如何用JAVA制作一个漂亮的表格
  15. 好工具推荐系列:Linux远程连接,终端工具,SSH和SFTP
  16. TTP233H-BA6功能介绍于适用场景;
  17. z变换的初值终值定理,及matlab示例
  18. Laravel8.x+AntDesign+Vue智慧社区台管理系统框架
  19. 辅助信息服务器,我开启了辅助核算 要去哪里增加新的辅助信息?
  20. Java 通过三方库实现指纹识别对比

热门文章

  1. Linux的磁盘系统和文件系统显示的文件大小为什么不一样(du指令和ls指令的区别)...
  2. win10下搭建QTP测试环境
  3. (一)网络编程基础之套接字入门
  4. Extjs window autoload
  5. 085 对象的绑定方法
  6. 硬盘安装Windows需要了解的DOS命令
  7. 进程,线程,协程的区别与联系
  8. VSCode设置中文语言
  9. 2018.09.18 循环终止
  10. Python入门2(Python与C语言语法的不同、Notepad++运行Python代码)