惊人的SQL查询体验,按缓慢的查询优化分组!

惊人的SQL查询体验,按缓慢的查询优化分组!

作者:dijia478来源:https://www.cnblogs.com/dijia478/p/11550902.html一个有问题的背景当前网络出现缓慢的查询,数量级为500万,单表查询速度超过30秒,您需要优化sql,sql如下:我在测试环境中构造了500万条数据来模拟这种缓慢的查询。

简而言之,它是在特定条件下查询哪些用户在那里。

非常简单的sql,您可以看到查询需要37秒。

我们来谈谈app_account字段的分布。

随机生成5000个不同的随机数,然后分配给这500万条数据。

平均每个app_account有1000个重复值,总共有5000种类型。

其次,看看执行计划。

如您所见,我将索引添加到group by字段并使用了它。

3.优化说实话,我不知道如何优化,我该如何优化这些东西!首先,以下想法是无用的。

理念1:应按空顺序添加;避免无用的排序,但实际上,它对耗时的结果影响很小,而且仍然很慢。

想法2:where条件太复杂且没有索引,这会导致查询变慢,但是我向where条件的所有字段添加了一个复合索引,该索引仍然没有用。

搜索并关注工匠笔记的微信公众号,以回复采访并获得经典采访材料的摘要。

想法3:由于分组依据比较慢,请尝试更改为不同? ? (这是此博客中提到的神奇的地方)他妈的什么? ? ? ! ! !情况如何,瞬间如此之快? ? ! ! !尽管我知道group by和different之间的性能差距很小,但我没想到差距会这么大! ! !伟大的发现! ! 4.您认为这已经结束了吗?我真的希望结束了。

那么这个问题将非常简单地解决。

顺便说一句,我以为一切都结束了,发现了新的知识。

但!将错误转移到测试后,距离测试还超过30秒! ?发生了什么! ! ? ? ?我当然不相信了。

我试图在测试计算机上执行SQL,这花了30多秒钟。

我回到我的计算机,连接到相同的数据库,并执行了sql,0.8秒! ?在什么情况下,相同的库,相同的SQL,两台计算机的执行之间的差异怎么会这么大!后来,它直接在服务器上执行:我喝醉了,但仍然超过30秒。

我的电脑似乎有问题。

后来,我在几个同事的计算机上进行了实验,最后得出结论:这是因为我使用了SQLyog!嘿,现在我发现只有使用sqlyog来执行此“优化”操作, SQL将花费0.8秒,直接在navcat和服务器上执行将花费30秒以上。

那是sqlyog的问题。

尚不清楚sqlyog是否已优化。

慢查询的问题仍在解决(我认为问题可能是由mysql本身的参数引起的)。

这只是这个坑的记录,sqlyog执行sql speed,而服务器执行sql speed,某些SQL存在巨大差异,这是不可靠的。

搜索并关注工匠笔记的微信公众号,以回复采访并获得经典采访材料的摘要。

5.跟踪(未解决)感谢您的建议,我将回答问题的进展:1.所谓的sqlyog查询速度很快,而命令行查询速度却很慢。

已找到原因。

这是因为sqlyog会在查询语句后默认添加限制1000,因此速度非常快。

这个问题不再纠结。

2.我尝试过的方法(没有一个有用):①在app_account字段中添加索引。

②在sql语句后按空添加顺序。

③在where条件中调整字段的查询顺序,并将索引放在最前面。

④将组合索引添加到where条件的所有字段中。

⑤使用子查询,首先检查where条件中的内容,然后删除重复项。

测试环境和实时网络环境数据仍然有些不同。

我在实时网络上发布了SQL执行的图片(1分钟...):6.最终解决方案谢谢@言枫大佬在42楼的评论!在您提醒之后,我确实发现在解释执行计划中,索引似乎没有使用我创建的idx_end_time。

然后,我在实时网络上进行了果断的尝试,并强制指定了idx_end_time索引。

结果只有0.19秒!至此,问题解决。

实际上,我的同事昨天还想知道该表的索引是否构建过多,从而导致该表的使用不正确。

最初使用idx_org_id和idx_mvno_id。

现在是必填ID

深圳市相信过程科技有限公司

电话:0755-36817630

地址:深圳市宝安区翻身路富源大厦408

邮箱:1666257495@qq.com

联系人:舒先生

QQ:1666257495

深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询