为什么相同的查询在我第二次运行时运行得更快?

Phi*_*rly 3 oracle oracle-sql-developer

我注意到在运行 SQL 查询时,第二次比第一次更快。所以我的问题是,在 Oracle SQL Developer 中,您在哪里可以看到解释这种行为的统计数据?

Phi*_*lᵀᴹ 9

您遇到的情况称为缓存。数据库不必第二次访问磁盘,因为它可以从自己的缓冲区缓存中获取数据,或者操作系统/磁盘阵列也可以从自己的缓存中更快地提供数据。

为了查看 Oracle 是从磁盘获取数据还是使用其缓存,您可以在 SQL Developer 中启用自动跟踪。

你会得到如下内容:

Statistics
----------------------------------------------------------
      1  recursive calls
      0  db block gets
      3  consistent gets
      0  physical reads
      0  redo size
    538  bytes sent via SQL*Net to client
    543  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed
Run Code Online (Sandbox Code Playgroud)

从磁盘中提取物理读取

使初始查询变慢的另一个因素是 Oracle在第一次看到查询时必须对其进行硬解析- 这涉及为查询找到最佳(就 Oracle 优化器而言)执行计划,并且计算量很大(CPU) 昂贵,因此需要时间。