我正在优化 MySQL 查询,但遇到了一个奇怪的问题。我从不使用实时生产数据库,所以我创建了一个转储并将其导入到我本地机器上的数据库中mysqldump
,没有使用额外的选项。
生产数据库和我本地虚拟机上的mysql版本几乎完全相同:
生产:mysql Ver 14.14 Distrib 5.1.61,用于 debian-linux-gnu (x86_64) 使用 readline 6.2
虚拟机:mysql Ver 14.14 Distrib 5.1.63,用于 debian-linux-gnu (x86_64) 使用 readline 6.2
这个查询非常复杂,在生产环境中大约需要 4-5 秒,但在 VM 上只需要不到 1 秒。我唯一能想到的可能是生产数据库上有锁阻止查询立即运行,并且查询必须等待锁?
对EXTENDED EXPLAIN
每个数据库运行查询时几乎相同,但有一些细微差别。
我SQL_NO_CACHE
在查询之前使用以确保查询不会命中缓存。
所以我的问题是:
EXTENDED EXPLAIN
当我使用生产数据库的副本并且 mysql 版本相同时,可能会导致什么不同,甚至是轻微的不同?- 有什么理由我没有想到会导致相同的查询在生产数据库上花费更长的时间?