gpt4 book ai didi

php - MySQL 分析显示查询时间比 PHP 微时差慢

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:50 25 4
gpt4 key购买 nike

我正在尝试以两种方式测量特定 MySQL 查询的速度。

在 MySQL 中

SET profiling = 1;
QUERY;
SHOW PROFILES;

在 PHP 中

$time = microtime(true);
Database::instance()->query(...);
$time = microtime(true) - $time;

SHOW PROFILES 显示的时间约为 0.009 秒(持续时间)。从 $time 开始显示的时间约为 0.001 秒。

我很困惑,因为我原以为 PHP 测量会比 MySQL 测量慢。这没有任何意义。谁能解释一下?

编辑:我知道缓存,我已经用 SQL_NO_CACHE 试过了,但它似乎没有什么区别。不过我注意到的是,当我重新启动 MySQL 服务器时,前几次分析尝试与 PHP 报告的内容一致。但是当我再运行几次分析时,持续时间突然跳跃:

1   0.00137900  SELECT COUNT(*) AS count ↵ 
2 0.00138800 SELECT COUNT(*) AS count ↵
3 0.00912700 SELECT COUNT(*) AS count ↵
4 0.00907300 SELECT COUNT(*) AS count ↵
5 0.00878900 SELECT COUNT(*) AS count ↵
6 0.00984200 SELECT SQL_NO_CACHE COUNT(*) AS count ↵
7 0.00895200 SELECT SQL_NO_CACHE COUNT(*) AS count ↵

分解耗时约 0.009 秒的查询,看来时间的跳跃来自于创建一个 tmp 表。但是前两次它确实很快(1 和 2)。基于 PHP microtime(),它也非常快。之后分析器的某些东西减慢了速度?

starting    0.000055
checking permissions 0.000004
Opening tables 0.000013
System lock 0.000050
optimizing 0.000010
statistics 0.000041
preparing 0.000012
Creating tmp table 0.007696
executing 0.000014
Copying to tmp table 0.000317
Sorting result 0.000031
Sending data 0.000007
removing tmp table 0.000423
Sending data 0.000008
init 0.000007
optimizing 0.000011
executing 0.000005
end 0.000003
query end 0.000011
closing tables 0.000002
removing tmp table 0.000004

关闭表 0.000006释放项目 0.000054记录慢查询 0.000002清理 0.000003

最佳答案

那是因为查询在 SQL 脚本执行后被缓存。

因此,SQL 脚本第一次运行查询。结果被缓存。然后执行 PHP 脚本。查询已被缓存,因此可以更快地检索结果。


(奥利·琼斯)

尝试包括 SQL_NO_CACHE测量性能时查询中的选项。

E. G。

SELECT SQL_NO_CACHE COUNT(*), SUM(col)
FROM table

@奥利琼斯

但是硬盘I/O层面上什至还有缓存,独立于MySQL的缓存。

-ktm

关于php - MySQL 分析显示查询时间比 PHP 微时差慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167629/

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