专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

一个关于explain出来为all的说明及优化

explain sql语句一个语句,得到如下结果,为什么已经创建了t_bill_invests.bid_id的索引,但却没有显示using index,而是显示all扫描方式呢,原来这还与select里面的内容有关

![Image 1][]

真正执行此语句所用的时间:

17:08:20 SELECT t_bill_invests.`receive_corpus`, t_bill_invests.`receive_interest`, t_bids.`period`, t_bill_invests.`receive_time`, `t_bids`.`title` AS `title`, `t_bids`.`period_unit` AS `period_unit` FROM `t_bill_invests` LEFT JOIN `t_bids` ON `t_bids`.`id` = `t_bill_invests`.`bid_id` LEFT JOIN t_invests ON t_bill_invests.`invest_id` = `t_invests`.`id` WHERE `t_bill_invests`.`status` = -1 AND `t_invests`.`transfer_status` <> – (1) AND t_invests.user_id = 3 ORDER BY t_bill_invests.receive_time ASC LIMIT 5 5 row(s) returned 23.728 sec / 0.000 sec

我们先来做几个小实验来说明此问题,如下,我们在user_id与bid_id上都是有索引的,但是explain出来的结果却不一样:

86_1.png

这是因为user_id并没有在条件语句中,mysql会通过bid_id找到相关的值,再进一步回表扫描,故会显示为all,但此时的扫描已经不是真的全表扫描,而是根据条件中筛选出来的值再来找到对应的user_id

进一步的,如果我们添加一个覆盖索引:

85_2.png

可以发现,现在虽然是select user_id但也可以走索引了。

一个问题是我们并不能把所有的select里面的列都添加为覆盖索引,所以我们只要保证条件里面所涉及的列有相应的索引,这个速度都会是非常快的。

通过检查这条语句,发现t_bill_invests.`invest_id`这一列还没有添加索引,故我们添加上:

alter table t_bill_invests add index index_bill_inv_invest_id(invest_id)

再次执行:

![Image 1][]

真正执行的时间:

17:12:38 SELECT t_bill_invests.`receive_corpus`, t_bill_invests.`receive_interest`, t_bids.`period`, t_bill_invests.`receive_time`, `t_bids`.`title` AS `title`, `t_bids`.`period_unit` AS `period_unit` FROM `t_bill_invests` LEFT JOIN `t_bids` ON `t_bids`.`id` = `t_bill_invests`.`bid_id` LEFT JOIN t_invests ON t_bill_invests.`invest_id` = `t_invests`.`id` WHERE `t_bill_invests`.`status` = -1 AND `t_invests`.`transfer_status` <> – (1) AND t_invests.user_id = 3 ORDER BY t_bill_invests.receive_time ASC LIMIT 5 5 row(s) returned 1.763 sec / 0.000 sec

可以发现,时间已经大大减少了,目标完成。

[Image 1]:

未经允许不得转载:搜云库技术团队 » 一个关于explain出来为all的说明及优化

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们