使用联合索引需要注意的列顺序
比如在使用
select * from user where x=1 and y=2;
的时候,应该需要建立的索引可能是 add key(x,y)
如何确定索引的顺序
一般经验而言
可以使用
select count(distinct x)/count(x) as x_selectivity,
count(distinct y)/count(y) as x_selectivity,
count(*),
from user;
************************row1***************************
x_selectivity: 0.0001
y_selectivity: 0.0312
count(*) : 16022

在x中的选择性越高,所以可以放在第一列
alert table user add key(x,y);

另外可以在历史的慢查询中找到类似的进行优化

比如
select * from user where x=1 and y=2;

select sum(x=1),sum(y=2) from user\G;
******************row1**********************************
sum(x=1): 7992
sum(y=2): 30

y的选择性会更高一些,可以放在第一列

然后看看y=2 对应的x列的选择性
select sum(x=1) from user where y=2
******************row1**********************************
sum(x=1): 17

但是有可能mysql存在查询不公平的情况,服务器的整体性能可能更糟糕,,所以需要提取一下最差的查询进行这项的查询工作

这类工作被某些优化极客geek称为sarg。这是“可搜索参数(searchable argument)”的缩写。

mysql b-tree 索引下联合索引的顺序测试方案的更多相关文章

  1. mysql索引 多个单列索引和联合索引的区别详解

    背景: 为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下. 一.联合索引测 ...

  2. mySql单列索引与联合索引的区别

    引自https://my.oschina.net/857359351/blog/658668 第一张表gift和索引为联合索引,如图: 第二张表gift2为单列索引,如图: 下面开始进行测试: 相同的 ...

  3. MySQL单列索引和联合索引

    MySQL单列索引和联合索引   所有的MySQL列类型能被索引.在相关的列上的使用索引是改进SELECT操作性能的最好方法. 一个表最多可有16个索引.最大索引长度是256个字节,尽管这可以在编译M ...

  4. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  5. MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序

    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序   What's Index ? 索引就是帮助RDBMS高效获取数据的数据结构. 索引可以让我们避免一行一行进行全表扫描.它的 ...

  6. mysql单列索引和联合索引的使用

    1,首先要确定优化的目标,在什么样的业务场景下,表的大小等等.如果表比较小的话,可能都不需要加索引. 2,哪些字段可以建索引,一般都where.order by 或者 group by 后面的字段. ...

  7. 【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引

    接上一篇内容. 一.聚簇索引 其实之前内容中介绍的 B+ 树就是聚簇索引. 这种索引不需要我们显示地使用 INDEX 语句去创建,InnoDB 引擎会自动创建.另外,在 InnoDB 引擎中,聚簇索引 ...

  8. 分析MySQL中哪些情况下数据库索引会失效

    要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 一.explain 用法:explain +查询语句. id:查询语句的序列号,上面图片中只有一个selec ...

  9. 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用

    2.创建联合索引,从坐到右分别为:userid.openId.name   2. #### --------------  多表联合查询 update 2019/03/13  ------------ ...

随机推荐

  1. pseudocode of zigzag conversion

    1.Title : The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of ...

  2. 【解决方案】客户端请求数据较大时,nginx返回数据被截断

    [问题描述]:客户端使用curl命令向nginx请求数据,当返回数据量较大时,数据被截断,客户端无法获取完整的数据. [问题原因]:nginx配置文件中包含了proxy_buffer_size.pro ...

  3. webview的javascript与Native code交互

    http://my.oschina.net/u/1376187/blog/172296 项目中使用了webview显示网页,其中需要网页和native方法有交互,搜索到一篇文章,转发分享一下: === ...

  4. MySQL5.7以上Zip版官方安装文档(选译)

    前言 在windows上安装Zip版MySQL(选译) 学习mysql的朋友们会发现5.7+版本的mysql变得比以前难安装了许多(当然我们可以选择installer版本,但是这样总感觉对学习mysq ...

  5. shell编程/字库裁剪(1)

    我写这个帖子的意图,在于三个: 1.用代码生成代码的思维. 2.shell编程的思路. 3.裁剪字库的具体程序. 我打算分为三节来说: 第一节讲裁剪裁剪词库的意义以及使用场合: 第二节讲如何用shel ...

  6. JavaScript观察者模式

    观察者模式观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得 ...

  7. struts2使用模型传值

    用户bean package userBeans; public class User { private String username; public String getUsername() { ...

  8. Python[1,1]

    ####################################################################################### //只是为了凑够150字 ...

  9. Android O --Soong Build

    Concept: Kati (https://android.googlesource.com/platform/build/kati/) - Reads Android.mk files -> ...

  10. 转载——yum源的超级简单配置

    1.先挂载光盘. 使用命令"mount  -o  loop  /dev/sr0 /mnt/cdrom".如果使用命令"mount -o  loop  /dev/cdrom ...