sql 查询的惊人时间统计

Surprising timing stats for sql queries

我有两个查询,我想分析其计时参数。

第一个查询比第二个查询花费的时间长得多,而在我看来它应该是另一种方式round.Any解释?

第一次查询:

select mrn
from EncounterInformation
limit 20;

第二次查询:

select enc.mrn, fl.fileallocationid
from EncounterInformation as enc inner join 
     FileAllocation as fl
     on enc.encounterIndexId = fl.encounterid
limit 20;

MYSQL 第一个查询在 0.760 秒内运行,而第二个查询在 0.509 秒内运行令人惊讶。

两个查询之间的测量性能可能不同的原因有很多:

  • 查询的执行计划(主导因素)
  • 返回数据的大小(可能mrn是一个字符串,对于第一个查询的结果集来说真的很长,但对第二个查询不是)
  • 其他数据库 activity,锁定 table 和索引
  • 其他服务器activity
  • pre-loaded 的数据和索引缓存 -- 在数据库本身或底层 OS 组件中

您的观察是正确的。第一个应该比第二个快。更重要的是观察到这对您的简单查询根本没有意义:

The first query runs in 0.760 seconds

select mrn
from EncounterInformation
limit 20;

为此所做的工作通常是加载一个数据页(或者可能是少数)。如果满足以下条件,那只会持续花费 0.760 秒:

  • 你的数据存储真的很慢(想想 "carrier pigeons")。
  • EncounterInformation 是视图而不是 table。
  • 你不懂时间。

如果差异介于 0.760 毫秒 秒和 0.509 毫秒之间,则差异非常小,可能是由于其他问题——热缓存、其他 activity在服务器上,其他数据库 activity.

也有可能您正在测量 已用 时间而不是数据库时间,因此网络拥塞可能是一个问题。

如果您正在查询视图,那么在不知道视图是什么的情况下,所有的赌注都是无效的。事实上,如果您关心性能,您应该在问题中包括执行计划。

我无法解释其中的区别。我能说的是你的观察是合理的,但你的问题缺乏很多信息表明你需要更多地了解如何理解时间。我建议您从了解 explain.

开始