我有一个查询看起来是这样的:
SELECT id FROM user WHERE id='47'
使用类似于这样的分析数据,ID已经被索引,并且对于此查询读取始终很快。
SET profiling = 1;
SHOW PROFILES;
查询始终在约0.0002秒内执行。
但是,如果我从PHP端对查询进行分析,就像这样:
$current = microtime(true);
$data = $conn->query($full_query);
$elapsed = microtime(true) - $current;
偶尔会有大约50个查询中的1个需要0.2秒左右。但是,在我的测试脚本中,我使用SET profiling = 1;对查询进行了分析,即使通过PDO的PHP往返时间可能为0.2秒,查询时间仍然为0.0002。
我知道或者知道不会引起问题的事情:
- 查询不慢。当我查看相同的查询,从相同的查询运行中,在PHP中进行配置文件和使用SET PROFILING进行配置文件时,查询始终很快,并且即使从PHP端显示需要0.2秒,也从未在慢查询日志中记录。
- 这与skip-name-resolve无关-这是不一致的,而且我已经打开了skip-name-resolve
- 这与查询缓存无关,行为存在于两者中
- 即使是来自缓存的查询也会出现此行为。
- 查询实际上并没有选择ID,但我使用此查询进行测试以显示它不是磁盘访问问题,因为该字段肯定已索引。
- 这些表只有10-20兆字节,索引大约为1兆字节。机器显示非常少的负载,innodb没有使用其所有缓冲区。
- 这是针对一个除了我的测试查询之外没有其他活动的表进行测试的。
有人有什么其他检查的想法吗?对我来说,这似乎是一个网络问题,但我需要能够看到它并找到问题以修复它,而我已经没有地方可以检查了。有任何想法吗?