标签:

MySQL5.0之前,一条语句中一个表只能使用一个索引,无法同时使用多个索引。但是从5.1开始,引入了 index merge 优化技术,对同一个表可以使用多个索引。理解了 index merge 技术,我们才知道应该如何在表上建立索引。

相关文档:http://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html (注意该文档中说的有几处错误)

The Index Merge method is used to retrieve rows with several range scans and to merge their results into one. The merge can produce unions, intersections, or unions-of-intersections of its underlying scans. This access method merges index scans from a single table; it does not merge scans across multiple tables.

In EXPLAIN output, the Index Merge method appears as index_merge in the type column. In this case, the key column contains a list of indexes used, and key_len contains a list of the longest key parts for those indexes.

index merge: 同一个表的多个索引的范围扫描可以对结果进行合并,合并方式分为三种:union, intersection, 以及它们的各种组合。

Examples:

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

SELECT * FROM tbl_name

WHERE (key1 = 10 OR key2 = 20) AND non_key=30;

SELECT * FROM t1, t2

WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE ‘value%‘)

AND t2.key1=t1.some_col;

SELECT * FROM t1, t2

WHERE t1.key1=1

AND (t2.key1=t1.some_col OR t2.key2=t1.some_col2);

文档这里是有错误的:最后一个select语句, t2.key1=t1.some_col OR t2.key2=t1.some_col2,因为这里使用的是 OR,所以这里是无法使用组合索引的。

The Index Merge method has several access algorithms (seen in the Extra field of EXPLAIN output):

Using intersect(...)

Using union(...)

Using sort_union(...)

根据索引合并的方式不同,会在explain结果中显示使用了那种合并方法。

一般而且出现了 Index merge 并不一定是什么好事。比如一般出现了 Using intersect 的执行计划,预示着我们索引的建立不是最佳的,一般可以通过建立符合索引来进一步进行优化,可以参考文章:https://www.percona.com/blog/2009/09/19/multi-column-indexes-vs-index-merge/

标签:

mysql+index组合索引_MySQL 优化之 index merge(索引合并)相关推荐

  1. mysql字段简索引_MySQL优化看这一篇就够了

    本文概要 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 ...

  2. mysql 走索引 很慢_MySQL优化:为什么SQL走索引还那么慢?

    背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 core 分析过程 接手这个问题时现场已经不在了,信息有限,所以我们先从 ...

  3. mysql 回表查询优化_MySQL优化:如何避免回表查询?什么是索引覆盖?

    转自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651962609&idx=1&sn=46e59691257 ...

  4. mysql优化varchar索引_MySQL优化--概述以及索引优化分析

    一.MySQL概述 1.1.MySQL文件含义 通过如下命令查看 show variables like '%dir%'; MySQL文件位置及含义 名称 值 备注 basedir /usr/ 安装路 ...

  5. mysql中b树是什么_MySQL优化中B树索引知识点总结

    为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太长, 3.或等待时间太长 4.sql语句欠佳,以及我们索引失效 5.服务器参数设置不合理 SQL语句执行过程分 ...

  6. mysql in 命中索引_MySql优化-你的SQL命中索引了吗

    在项目开发中SQL是必不可少的,表索也一样.这些SQL的运行性能不知道吗?有多少是命中了索引的?命中哪个索引?索引中有哪个是无效索引?这些无效索引是否会影响系统的性能?带着这些问题我们一起来学习一下. ...

  7. mysql索引使增删变慢_mysql优化(四)–索引

    http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 一. 四种索引类型: 主键索引,唯一索引,全文索引,普通索引 二.  为什 ...

  8. mysql优化之索引_mysql优化之索引

    概念: 在数据库中除了数据之外,还维护着满足特定查找算法的数据结构.这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引.通常使用B树以及变种B+树 ...

  9. mysql 回表查询优化_mysql:若何行使笼罩索引制止回表优化查询

    说到笼罩索引之前,先要领会它的数据结构:B+树. 先建个表演示(为了简朴,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml 17 ...

最新文章

  1. python执行cmd并返回是否成功_python脚本执行CMD命令并返回结果的例子
  2. 多思计组原理虚拟实验室_先睹为快!汽院实验室组团来亮相_搜狐汽车
  3. 技术动态 | TechKG:一个面向中文学术领域的大型知识图谱
  4. 分享MYSQL中的各种高可用技术(源自姜承尧大牛)
  5. Windows下动态库的制作与使用
  6. Oracle数据库-建库、建表空间,建用户
  7. Elasticsearch 8.x 正式发布!
  8. 合成孔径雷达算法与实现_典型线面目标合成孔径雷达参数化成像
  9. telegtram的通信协议MTproto2.0学习3 之 (telethon代码分析与TL的实现1)
  10. 企业微信登陆服务器设置,企业微信怎么登入
  11. exchange协议发送邮件
  12. Apollo选型及优势介绍
  13. autosar arxml文件配置(四)
  14. opencv 打开摄像头
  15. 手机端上传照片压缩功能canvas
  16. Libuv源码解析 - uv_loop整个初始化模块
  17. 【Spark】Spark基础教程
  18. NRF52832学习笔记(23)——GAP主机端连接
  19. vs2013运行c语言出现:无法查找或打开 PDB 文件问题解决
  20. 小米手机进行测试uiautomator出现的故障

热门文章

  1. 一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
  2. UML图系列——用例图
  3. 转译:Oracle 中 Object_iD 和 Data_Object_ID 的区别
  4. axure能做剪切蒙版吗_卫生间瓷砖不打掉能做防水吗
  5. python 乘法运算定律_计算机组成原理(上)资料
  6. mysql ereg_php中正则表达式匹配函数ereg是不是被弃用了?
  7. 与容器服务 ACK 发行版的深度对话第二弹:如何借助 hybridnet 构建混合云统一网络平面
  8. 阿里云消息队列 2021 新功能新特性重要里程碑
  9. 深圳快测计算机技术有限公司,口罩快速检测出数据口罩快检预检办理
  10. 授予数据库账号dba权限_从自建Oracle迁移至云原生数据仓库AnalyticDB PostgreSQL