Oracle SQL 查询提高了第二次和第三次执行的性能
Oracle SQL query improves performance on second and third execution
我们正在分析 Oracle 12c 数据库上的 sql 语句。我们注意到 运行ning 多次改进了以下语句。怎么解释第二次第三次就提高了?
SELECT COUNT (*)
FROM asset
WHERE ( ( (status NOT IN ( 'x1', 'x2', 'x3'))
AND ( (siteid = 'xxx')))
AND (EXISTS
(SELECT siteid
FROM siteauth a, groupuser b
WHERE a.groupname = b.groupname
AND b.userid = 'xxx'
AND a.siteid = asset.siteid)))
AND ( (assetnum LIKE '5%'));
- 首先 运行:24 秒。
- 第二 运行:17 秒
- 第三 运行:7 秒
- 第四run:7秒
- 使用结果现金调整:0,003 秒
Oracle 从磁盘中提取数据到内存中。第二次 运行 查询时,数据已在内存中找到,因此无需读取磁盘。导致更快的查询执行。
数据库是 "warmed up".
Oracle默认不缓存查询结果,而是缓存查询使用的数据块。 12c 还具有 "Adaptive execution plans" 和 "Cardinality feedback" 等功能,即使未重新计算 table 统计信息,也可能会在执行之间强制执行计划更改。
我们正在分析 Oracle 12c 数据库上的 sql 语句。我们注意到 运行ning 多次改进了以下语句。怎么解释第二次第三次就提高了?
SELECT COUNT (*)
FROM asset
WHERE ( ( (status NOT IN ( 'x1', 'x2', 'x3'))
AND ( (siteid = 'xxx')))
AND (EXISTS
(SELECT siteid
FROM siteauth a, groupuser b
WHERE a.groupname = b.groupname
AND b.userid = 'xxx'
AND a.siteid = asset.siteid)))
AND ( (assetnum LIKE '5%'));
- 首先 运行:24 秒。
- 第二 运行:17 秒
- 第三 运行:7 秒
- 第四run:7秒
- 使用结果现金调整:0,003 秒
Oracle 从磁盘中提取数据到内存中。第二次 运行 查询时,数据已在内存中找到,因此无需读取磁盘。导致更快的查询执行。 数据库是 "warmed up".
Oracle默认不缓存查询结果,而是缓存查询使用的数据块。 12c 还具有 "Adaptive execution plans" 和 "Cardinality feedback" 等功能,即使未重新计算 table 统计信息,也可能会在执行之间强制执行计划更改。