用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第一条的结果,第二条同理

 

转载于:https://www.cnblogs.com/chenxqNo01/p/6371075.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值