墨墨导读:MySQL EXPLAIN下 Using intersect交集。

一次优化的过程中,MySQL执行计划选择了单独的3个二级索引中的2个索引,通过Using intersect算法进行index merge操作。从字面意义来上intersect就是 交集的意思。虽然性能上没多少影响,但比较好奇,在理解当中MySQL知识体系中是没有交集语法。

集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(interp),记作A∩B。

MySQL没有intersect这样的语法,但EXPLAIN使用索引交集的算法。

1)EXPALAIN案例:

mysql>CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14)  NOT NULL,`last_name` varchar(16)  NOT NULL,`gender` enum('M','F')   NOT NULL,`hire_date` date NOT NULL,PRIMARY KEY (`emp_no`)
) ENGINE=InnoDB;mysql>
create index idx_fname on  employees(`first_name`);
create index idx_lname on  employees(`last_name`);
create index idx_birth on  employees(`birth_date`);mysql>EXPLAIN
SELECT  emp_no,birth_date,first_name,last_name
FROM employees
WHERE first_name ='Aral'
AND  last_name ='Masaki'
AND birth_date='1958-07-06';

下面进行查询:

using intersect:表示使用and的各个索引的条件时,该信息表示是从处理结果获取交集

2)通过官方的了解:
Using intersect方式是索引合并访问方法。一般有几种算法,在EXPLAIN输出的额外字段中显示:

  • Using intersect(…)

  • Using union(…)

  • Using sort_union(…)

索引合并交集算法对所有使用的索引执行同步扫描,并生成从合并索引扫描中接收到的行序列的交集。其中Using intersect 就是一种。

3)关闭优化器行为index_merge_interp实现单独一个索引:

mysql> SET optimizer_switch = 'index_merge_interp=off';
Query OK, 0 rows affected (0.00 sec)mysql> EXPLAIN   SELECT  emp_no,birth_date,first_name,last_name
FROM employees
WHERE first_name ='Aral'
AND last_name ='Masaki'
AND birth_date='1958-07-06'\G;

这里有疑问,那个性能会更好,以下是通过profile分析对比:

其中executing时间不使用索引交集方式性能更好。因为index merge方式执行了底层两次IO访问,导致执行时间长。

总结

  • 优化器方面index_merge_interp参数不建议关闭,理由是只要数据驻扎在入内存中,对于性能影响不大,所以有足够的内存分配到innodb buffer pool的时,保持默认值;

  • 但对于一些特定的SQL语句情况,需要交集优化器选项。

  • 测试当中,发现条件语句里不管有多少个索引可用,intersect 只选择2个索引;

  • 如上案例,建议是联合索引方式。

通过intersect分析,MySQL完全可实现intersect语法的支持,希望后续8.0版本里把这部分加进去。

参考:
https://stackoverflow.com/questions/4526686/why-would-mysql-use-index-interp-instead-of-combined-index
https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html

墨天轮原文链接:https://www.modb.pro/db/29619(复制到浏览器中打开或者点击“阅读原文”)

推荐阅读:144页!分享珍藏已久的数据库技术年刊


视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

详述MySQL Using intersect交集算法相关推荐

  1. 最快速度求两个数组之交集算法与hash

    一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...

  2. mysql数据库取交集_不同数据库取并集、交集、差集

    一.并集: 需求:汇总t1.t2两表的数据 mysql.postgresql.oracle数据库取并集都是用union/union all关键字,不再赘述 二.交集: 需求:选出既在t1表又在t2表的 ...

  3. 追踪广告效果保护用户隐私 —— 隐私集合交集算法可以得兼

    01 这条广告点击来自哪里? 你有过"感觉仿佛被广告轰炸"的感觉吗?比如苹果的iPhone11发布以后,街边公交站是它的广告,打开社交app有它的广告,打开视频app有它的广告,打 ...

  4. 基于Python + Django + mysql的协同推荐算法的电影推荐系统

    基于Python + Django + mysql的协同推荐算法的电影推荐系统 本系统一共分为前台系统功能和后台系统功能两个模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连 ...

  5. MySQL 五.索引与算法

    MySQL 五. 索引与算法 索引太多,插入时性能会受到影响, 应用程序的性能会受到影响;索引太少,查询时候的性能又比较底,所以说索引的创建要考虑其中的平衡点; 5.1 InnoDB存储引擎索引 B+ ...

  6. Intersect交集

    接下来分享的Intersect交集,我了解到Intersect交集和Union运算符之间有些相似但是又有些许的不同.与Union运算符类似,在查询的过程中需要包含俩个条件1.两个查询必须具有相同的列数 ...

  7. 最快速度求两个数组之交集算法

    该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大家都能想出 ...

  8. 在线电影推荐网 Python+Django+Mysql 协同过滤推荐算法在电影网站中的运用 基于用户、物品的协同过滤推荐算法 开发在线电影推荐系统 电影网站推荐系统 人工智能、大数据、机器学习开发

    在线电影推荐网 Python+Django+Mysql 协同过滤推荐算法在电影网站中的运用 基于用户.物品的协同过滤推荐算法 开发在线电影推荐系统 电影网站推荐系统 人工智能.大数据.机器学习开发 M ...

  9. MySQL普通用户无法本地登录的解决方法及MySQL的用户认证算法

    在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用普通用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况. 例如,我的MySQL中的用户为: mysql> ...

最新文章

  1. Mat 类型转 QImage 类型
  2. linux shell里面nohup的用法
  3. LeetCode Populating Next Right Pointers in Each Node(dfs)
  4. C和C++Everything教程的简介
  5. 保姆级的HTML零基础教程少见吧?这是第一节(1)
  6. 13002.tcp客户端程序(python)
  7. 【C语言】C语言学习整理-putchar,printf,getchar,scanf定义及区别
  8. Android复习资料
  9. Bosh vs Comet vs Long Polling vs Polling
  10. 框架整合——Spring与MyBatis框架整合
  11. WKWebView加载HTTPS的链接
  12. iOS - Push 通知推送
  13. Python selenium 模拟ip 代理ip地址访问
  14. 远程访问VM虚拟机方式记录
  15. 【航线运输驾驶员理论考试】飞行原理
  16. SQL Server Check检查约束用法
  17. vue接入下载文件接口
  18. 【Unity3d】在Unity3d中使用百度AI人脸识别功能
  19. 博图sodt定时器的用法_图文详解|西门子博途中的定时器指令
  20. 好机会!IT工程师恭喜了!纳入工信部-工业互联网人才库!8月31日报名截止

热门文章

  1. linux用户名是什么_什么是Linux用户?
  2. 设计模式-行为型模式-责任链模式
  3. Bootstrap 表单的帮助文本
  4. matla工具箱 SerialLink 的一些最近发现的功能
  5. Git笔记(22) 项目贡献要点
  6. 用c语言开发图形界面,「分享」C语言如何编写图形界面
  7. ufei pe安装linux,制作UEFI(64位)下的WinPE + Ubuntu + Acronis多启动U盘
  8. php服务器估算,使用zabbix API估算服务器磁盘空间可用天数
  9. django的form常用字段和参数
  10. shop--7.店铺编辑和列表--店铺列表展示 前端