gpt4 book ai didi

mysql - 优化查询?

转载 作者:行者123 更新时间:2023-11-29 07:40:13 25 4
gpt4 key购买 nike

我的查询运行时间为 28.39 秒。我该如何优化它?

explain SELECT distinct UNIX_TIMESTAMP(timestamp)*1000 as timestamp,count(a.sig_name) as counter from event a,network n  where n.fsi='pays' and n.net=inet_ntoa(a.ip_src) group by date(timestamp) order by timestamp asc;
+----+-------------+-------+--------+---------------+---------+---------+--- ---+---------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+------+---------+---------------------------------+
| 1 | SIMPLE | a | ALL | NULL | NULL | NULL | NULL | 8177074 | Using temporary; Using filesort |
| 1 | SIMPLE | n | eq_ref | PRIMARY,fsi | PRIMARY | 77 | func | 1 | Using where |
+----+-------------+-------+--------+---------------+---------+---------+------+---------+---------------------------------+

最佳答案

因此,一般来说,查看您的查询,我们发现表 event a 正在检查 8,177,074 行。这可能是缓慢的“根源”,因此我们想看看如何使用索引来减少搜索空间。

事件 a 的主要条件是

n.net=inet_ntoa(a.ip_src)

这里的问题是我们需要对a.ip_src的每一行进行计算(inet_ntoa),所以除了扫描整个表之外别无选择。一个可能更好的解决方案是反转比较并确保 a.ip_src 被索引。

a.ip_src=inet_aton(n.net)

只有在 n 中匹配的行数少于 a 中的行数时,效果才会更好。如果情况并非如此,您应该认真考虑在表中缓存此函数的结果并在其上创建索引。

最后,我猜测时间戳列位于 event a 中,在这种情况下,索引可能有助于排序和分组,但可能不会。您可以尝试在 (ip_src,timestamp) 上建立多列索引

关于mysql - 优化查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com