• 用explain来解析sql语句,然后建立正确的索引


    用explain MySQL中来解析sql语句是一个非常好用的工具,它可以查看你的sql语句的执行是直接全部扫描,还是经过索引优化的。用它来分析sql语句也可以避免一些无用的索引。下面来看一个例子:

    用sql来查询表中是否有匹配的a或者b(一共180w条记录)
    第一版:
    一条语句解决所有问题
    索引结构:id为唯一主键和索引
    sql语句:SELECT `id`,`a`,`b` FROM `statis` WHERE(`a` = "b967eaf77a" AND `a`<>0) OR (`b` = "43" AND `b`<>0) LIMIT 0,1
    查询效率:4s

    执行explain来分析:EXPLAIN SELECT `id`,`a`,`b` FROM `statis` WHERE(`a` = "b967eaf77a" AND `a`<>0) OR (`b` = "43" AND `b`<>0) LIMIT 0,1

    发现是全盘扫描的

    第一版增强版:
    索引结构:id为唯一主键和索引,增加a和b建立联合索引
    sql语句:SELECT `id`,`a`,`b` FROM `statis` WHERE(`a` = "b967eaf77a" AND `a`<>0) OR (`b` = "43" AND `b`<>0) LIMIT 0,1

    发现好像联合索引对or没有效果

    第二版:
    拆分sql语句,分成两步来
    索引结构:id为唯一主键和索引
    sql语句:
    sql语句:

    SELECT `id`,`a`,`b` FROM `statis` WHERE `a` = "b967eaf77a"

    SELECT `id`,`a`,`b` FROM `statis` FROM `statis` WHERE `b` = "43" 

    查询效率:第一条4s,第二条也是4s
    看来更慢了!!!

    explain的结果


    第三版:
    索引结构:id为唯一主键和索引,给a和b分别建立索引
    sql语句:
    SELECT `id`,`a`,`b` FROM `statis` WHERE `a` = "b967eaf77a"
    SELECT `id`,`a`,`b` FROM `statis` FROM `statis` WHERE `b` = "43" 

    查询效率:第一条0.0005s,第二条也是0.0005s

    explain第一条的结果,第二条同理

  • 相关阅读:
    qt QTimer 计时器
    qt DateTime 计算时间
    c++ win32 关机 注销 重启
    uniapp 修改meta:viewport
    初次使用 VUX
    移动端web app自适应布局探索与总结
    前端js模版 预编译工具Tmod js使用入门
    谷歌 Uncaught SecurityError: Failed to execute 'replaceState' on 'History 错误
    H5 前端页面适配响应式
    微信video标签全屏无法退出bug 本文系转载
  • 原文地址:https://www.cnblogs.com/chenxqNo01/p/6371075.html
Copyright © 2020-2023  润新知