您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

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

时间:03-20来源:作者:点击数:

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门