在一般的查询中,都要求尽量围绕创建的索引进行。针对索引,常用的有主键索引,单列索引,组合索引,索引合并等。

在评价索引时,关键看区分度。索引区分度=索引列唯一值/表记录数。

如果在区分度很低的列上建索引,那索引扫描的rows会相当大,该索引的性能表现就基本接近全表扫描了。

  • 主键索引

是一种特殊的唯一索引,不允许有空值。

  • 单列索引

针对表的单一列设置索引。

  • 组合索引

针对表的多列按列顺序设置索引。在组合索引中,基于BTree的原理,存在一个最左前缀匹配原则。如下索引(mobile_price_create_index):

能用到索引的场景:

mobile=a时,可以用到索引的第一列。

mobile=a and create=c时,只能用到索引的第一列。

mobile=a and price=b时,可以用到索引的两列。

mobile=a and price=b and create =c时,可以用到索引的三列。

mobile=a and price > b and create=c时,可以用到索引的前两列。

mobile>a and price =b and create=c时,只能用到索引的第一列。

mobile=a and price=b and create>c时,可以用到索引的三列。

order by a时,可以用到索引。

mobile=a order by price时,第一列过滤,第二列排序,可以用到索引。

order by mobile desc,price desc时,此时两列排序顺序一致,可以用到索引。

mobile > a order by a时,范围查询在第一列,排序在第一列,可以用到索引。

用不到索引的场景:

price=b and create=c时,用不到索引。

order by b时,不能用到索引。

order by mobile desc,price asc时,此时两列排序顺序不一致,用不到索引。

mobile > a order by price时,范围查询在第一列,排序在第二列,第二列用不到索引。

这里要声明一个误区,参数的顺序不影响使用组合索引。mobile=a and price=b and create =c 与 create=c and price=b and mobile=a是等价的。

索引的创建要根据最常使用的参数来设定,使用时,要尽量贴合索引来实现逻辑。

  • 索引合并

针对单表的查询,可以支持查询条件使用多个索引,然后对查询结果进行交集,并集,有序并集等处理。

mysql支持在针对单表的查询时,合并多个索引的查询结果。

如下索引结构:

执行如下执行计划:

explain select * from trade_order where gmt_create >'2018-06-02 13:25:23' or mobile ='mobile-3679';

这个sql中使用了合并索引,分别针对gmt_create和mobile使用了2个索引。然后将其结果集求并集之后排序。

针对or的查询条件,组合索引不能起到有效的作用。此时可以通过在条件上建单独的索引,然后合并使用。

针对and的查询条件,创建组合索引效率更好,退而求其次时,可以选择创建多个索引,然后合并使用。

那如果出现慢查询,可以根据执行计划,看是否未命中索引,命中的索引区分度是否足够,组合索引是否满足最左前缀的原则,如果索引只能命中一部分,是否可以通过合并索引的方式改进sql。

mysql(三) 慢查询分析(二)的更多相关文章

  1. MySQL的慢查询分析

    慢查询分析日最初是用来捕获比较“慢”的查询,在mysql5.1 + 版本中,慢查询的功能被加强,可以通过设置long_query_time为0来捕获所有的查询,而且查询的响应时间已经可以做到微妙级别. ...

  2. MySQL的索引优化分析(二)

    一.索引优化 1,单表索引优化 建表 CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO ...

  3. MySQL慢日志查询分析方法与工具

    MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...

  4. 【mysql】截取查询分析

    1. 慢查询日志 1.1 是什么 (1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL ...

  5. mysql的in查询分析

    群里山楂大仙和电台大神探讨到mysql的in查询的问题,问题如下: student表有class_id的索引,但是只查询一个的时候用索引,查两个就不用索引了 这是很奇怪的现象,我试了一下也是这样,真是 ...

  6. 一次MySQL线上慢查询分析及索引使用

    本文由作者郑智辉授权网易云社区发布. 0.前言 本文通过分析线上MySQL慢查询日志,定位出现问题的SQL,进行业务场景分析,结合索引的相关使用进行数据库优化.在两次处理问题过程中,进行的思考. 1. ...

  7. 关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析

    大家可以自行网上找资源(网上资源比较多,不建议下载我的),也可以在我这里下载: 1.取得每个部门最高薪水的人员名称:正确   一共有4个单位,要进行左外连接 其中一个单位没得员工 SELECT dep ...

  8. 小贝_mysql三种子查询

    mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...

  9. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

随机推荐

  1. go学习笔记-反射(Reflection)

    反射(Reflection) 反射是利用reflect包实现的 反射可大大提高程序的灵活性,使得interface{}有更大的发挥余地 反射使用TypeOf和ValueOf函数从接口中获取目标对象信息 ...

  2. Java——多线程---18.11.22

    多线程代码:Runnable方法 package com.hebust.java.third; import java.util.Random; public class SaleTicket imp ...

  3. PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

  4. CF 741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

    D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths http://codeforces.com/problemset/probl ...

  5. Mac OS下Android Studio:/dev/kvm not found

    在配置模拟器时出现该报错,在网上找了很多教程都没能解决,当然可能是这些教程并不适用于我.总的来说,还是要“对症下药”! 解决方法如下: 点击“系统偏好设置”-“安全性与隐私”,然后会在“通用”这个界面 ...

  6. SQLite FTS3/FTS4与一些使用心得

    此文已由作者王攀授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 简介 对于今天的移动.桌面客户端应用而言,离线全文检索的需求已经十分强烈,我们日常使用的邮件客户端.云音乐.云 ...

  7. spring使用set方法注入的常见类型写法

    首先配置spring的pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  8. Linux命令应用大词典-第41章 MySQL数据库

    41.1 mysqld_safe:MySQL服务器启动脚本 41.2 mysql_install_db:初始化MySQL数据目录 41.3 mysqlshow:显示MySQL数据库结构 41.4 my ...

  9. 初学Direct X (2)

    初学Direct X (2) 这一次要学习如何现实位图,尽管看过对双缓冲机制还有很多疑问,但是这并不阻碍我对他的入门了解 Direct3D提供了一个双重/后台缓冲区,在调用CreateDevice之时 ...

  10. Siki_Unity_2-1_API常用方法和类详细讲解(上)

    Unity 2-1 API常用方法和类详细讲解(上) 任务1&2:课程前言.学习方法 && 开发环境.查API文档 API: Application Programming I ...