zoukankan      html  css  js  c++  java
  • [MySQL] mysql优化实例-为join表关联字段增加索引

    在排查所有查询语句效率的过程中 , 发现了join关联表的时候 , 被驱动表没有走索引而是进行的全表扫描

    实际的sql语句如下:

    explain select a.* from audit_rules a left join audit_rules_detail b on a.id=b.rule_id where a.ent_id=23684

    输出:

    +----+-------------+-------+------+---------------+------------+---------+-------+------+-------+
    | id | select_type | table | type | possible_keys | key        | key_len | ref   | rows | Extra |
    +----+-------------+-------+------+---------------+------------+---------+-------+------+-------+
    |  1 | SIMPLE      | a     | ref  | idx_ent_id    | idx_ent_id | 4       | const |   12 |       |
    |  1 | SIMPLE      | b     | ALL  | NULL          | NULL       | NULL    | NULL  |   35 |       |
    +----+-------------+-------+------+---------------+------------+---------+-------+------+-------+

    看到表b是全表扫描 , 这是因为b的字段rule_id没有索引

    增加上索引以后

    +----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------------+
    | id | select_type | table | type | possible_keys | key         | key_len | ref          | rows | Extra       |
    +----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------------+
    |  1 | SIMPLE      | a     | ref  | idx_ent_id    | idx_ent_id  | 4       | const        |   12 |             |
    |  1 | SIMPLE      | b     | ref  | idx_rule_id   | idx_rule_id | 4       | sinanet.a.id |    1 | Using index |

    MySQL是只支持一种JOIN算法Nested-Loop Join(嵌套循环链接)
    当关联字段有索引时,走的是Index Nested-Loop Join(索引嵌套链接)
    没有索引时会走,Block Nested-Loop Join比Simple Nested-Loop Join多了一个中间join buffer缓冲处理的过程

    没有索引时:

    有索引时

  • 相关阅读:
    数据结构的理解
    等价、偏序和全序
    等价、偏序和全序
    二叉树与树的理解
    SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
    div:给div加滚动栏 div的滚动栏设置
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    OSX: 逻辑卷管理系统Core Storage(1)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    string实现
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14005908.html
Copyright © 2011-2022 走看看