mysql持续时间和获取时间

use*_*851 75 mysql mysql-workbench

我正在使用MySQL工作台 - 运行查询时持续时间和获取时间之间有什么区别?

还有一种方法可以在MySQL中启用微秒选项吗?

Ler*_*eri 132

获取时间 - 测量传输获取结果所花费的时间,这与查询执行无关.我不认为它是sql查询调试/优化选项,因为获取时间取决于网络连接,它本身与查询优化没有任何关系.如果获取时间是瓶颈,则更有可能出现网络问题.

注意:获取时间可能因每次查询执行而异.

持续时间 - 是需要执行查询的时间.在优化sql查询的性能时,应该尽量减少它.

参考

  • 对于优化问题,请记住选项`query_cache_type`必须为'OFF`,以便结果不受缓存影响.请参阅http://stackoverflow.com/questions/181894/mysql-force-not-to-use-cache-for-testing-speed-of-query (5认同)
  • 虽然我同意**持续时间**是您通常想要优化的值,因为它与查询的效率直接相关,异常高的**获取**时间也可以指出重要的逻辑错误和/或效率低下.例如,您可能会在客户端应缓存的每个查询中传输大量文本.或者当你只想到10时,你可能会返回100k行. (4认同)
  • 这似乎不对。我有两个返回相同行(15300)的查询,但它们的统计数据始终不同。一个每次需要 14,443 秒持续时间/1111,810 秒获取,其他则需要 443,986 秒持续时间/0,0089 秒获取。这是为什么? (2认同)

Kur*_*urt 14

持续时间显示执行查询所需的时间,而获取是读取结果集所需的时间(检索数据)

我不确定微秒选项.如果这是关于优化,请记住 - "过早优化是所有邪恶的根源"


PCO*_*PCO 11

Leri的回答是一个好的开始,但忽略了MySQL可以在获得所有查询结果之前将数据流式传输到客户端的事实。

下面是一个包含 2 个具有相同结果的查询的示例。第一个使用group by,因此 MySQL 必须在发送所有数据之前计算完整的聚合。第二个使用子查询,因此 MySQL 逐行计算结果集,并能够立即将第一行结果发送给客户端。

MySQL 工作台持续时间

正如你所看到的,第二个查询的获取时间长了 5 倍(对于相同的数据),因为MySQL Workbench 将第一次接收数据之前的时间显示为Duration,将之后的时间显示为Fetch,但因为可以涉及流式处理,这并不意味着获取持续时间只是网络持续时间。

Fetch期间,数据库仍然可以计算结果。因此,如果您看到较长的获取持续时间,您实际上可以做一些事情!这可能意味着您的 MySQL 数据库正在将结果行逐一流式传输,并且正在努力计算完整的结果集。