gpt4 book ai didi

MySQL (HeidiSQL) : Using localhost but 10 seconds of query time is "network"?

转载 作者:行者123 更新时间:2023-11-29 03:43:18 25 4
gpt4 key购买 nike

我正在使用 heidiSQL 编辑器运行 mySQL 查询。当它告诉我查询时间时,有时还会包括网络时间:

1 次查询的持续时间:1.194 秒。 (+ 10.078 秒网络)

但它不可能真的是网络,因为一切都在我自己的电脑上??额外的时间是否会随着其他设置而消失,或者我是否需要以通常的方式(重写/返工)提高查询性能?当我什至不确定是什么导致性能不佳时,我很难提高查询性能。

编辑:分析信息

我使用了这个简洁的分析 sql:http://www.mysqlperformanceblog.com/2012/02/20/how-to-convert-show-profiles-into-a-real-profile/

查询 1:

从my_table_with_100_thousand_rows中选择count(*);

“1 个查询的持续时间:0.390 秒。”(这个没有显示任何网络时间,但是一个简单的 count(*) 将近 0.4 秒似乎很多。)

STATE                    Total_R    Pct_R   Calls    R/Call
Sending data 0.392060 35.84 1 0.3920600000
freeing items 0.000214 0.02 1 0.0002140000
starting 0.000070 0.01 1 0.0000700000
Opening tables 0.000031 0.00 1 0.0000310000
statistics 0.000024 0.00 1 0.0000240000
init 0.000020 0.00 1 0.0000200000
(shorter times not included)

查询 2:

从 4 个包含许多行的表中选择 *,通过主键-外键或索引列连接。

“1 次查询的持续时间:0.156 秒(+ 10.140 秒网络)”(以下时间加起来超过总数?)

STATE           Total_R    Pct_R    Calls    R/Call
Sending data 16.424433 NULL 1 16.4244330000
freeing items 0.000390 NULL 1 0.0003900000
starting 0.000116 NULL 1 0.0001160000
statistics 0.000054 NULL 1 0.0000540000
Opening tables 0.000050 NULL 1 0.0000500000
init 0.000046 NULL 1 0.0000460000
preparing 0.000033 NULL 1 0.0000330000
optimizing 0.000028 NULL 1 0.0000280000
(shorter times not included)

查询 3:与查询 2 相同,但使用 count * 而不是 select *

“1 次查询的持续时间:10.047 秒。”

STATE         Total_R   Pct_R  Calls  R/Call
Sending data 10.050007 NULL 1 10.0500070000
(shorter times not included)

在我看来,如果它必须显示很多行,它会将网络时间包括在“持续时间”中,但这并不意味着我可以减去不需要显示行的时间。现在是真正的查询时间。这看起来对吗?

最佳答案

老问题!我很确定 Heidi 将耗时算作“网络时间”--

  • 从通过网络收到第一个响应数据包开始
  • 收到结果集中的最后一个响应数据包。

因此,对于您的 SELECT COUNT(*) FROM big _f_table 查询,第一个数据包立即返回,并声明有一个包含整数的列。

当查询引擎完成对行的计数时,该结果集的其余部分就会出现。所以海蒂所谓的“网络时间”就是统计行数的时间。这对于 MyISAM 来说几乎是瞬时的,而对于 InnoDB 则需要一些时间。

对于您的 SELECT tons of columns FROM complex join 同样的事情也适用。当查询计划器计算出结果集中的列时,第一个数据包到达。当所有数据最终通过您计算机的内部环回(本地主机)网络传输到 Heidi 时,最后一个数据包到达。

这就像您在浏览器开发工具中看到的一样。查询时间类似于“第一个字节的时间”,“网络时间”是传递剩余结果的时间。第一个字节的时间是查询解析/计划时间加上获取足够信息以发送结果集元数据的时间。网络时间是得到休息的时间。如果查询规划器可以直接从表存储中将行流式传输给您,您将拥有很大比例的网络时间。另一方面,如果它必须处理数据(例如使用 ORDER BY),您将有更高比例的查询时间。但是不要试图想太多这些东西。 MariaDB 和 MySQL 非常复杂,有层层缓存和抓取。他们满足查询的方式有时很难弄清楚。

关于MySQL (HeidiSQL) : Using localhost but 10 seconds of query time is "network"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396164/

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