查询计划存储在计划缓存中,用于视图和普通视图 SQL
来自here
确定。
一劳永逸: 对我有何帮助?
即使我在Query plans
中有cache
查询:一次我运行查询,他将扫描整个表格/ s +聚合+。 ......。
如果我明天运行它 - 将再次扫描整个表格/ s +聚合 ....
不可能出现这样的情况:“啊!!!我在缓存中有数据,所以我从那里拿走它...... ...(因为表格可能有改变...)
那么,真正的好处在哪里?
我似乎错过了什么。
谢谢。答案 0 :(得分:3)
假设我们有一个查询,例如
SELECT *
FROM
A
INNER JOIN B ON -- omitted
INNER JOIN C ON -- omitted
-- omitted
INNER JOIN Q ON -- omitted
有很多表。显然,执行这些连接的顺序将影响性能。此外,在给定表统计信息的情况下,确定最佳顺序也会花费一些时间。
通过缓存查询计划,我们可以支付决定最佳订单的成本只需一次 - 每次运行查询时,我们都知道先采取K
,将其加入E
,然后加入H
,依此类推。
当然,这意味着数据统计数据的重大变化会使我们的计划无效,但缓存任何内容总是需要权衡。
您可能会发现有助于更多地了解查询计划的方法和资源的资源是SQL Coach - 从THE Analogy开始。
答案 1 :(得分:2)
答案是缓存查询计划以防止每次编译查询计划的成本。第二次运行查询(或另一个可以使用相同计划的查询)时,不必再为重新运行编译过程付费,它只是从缓存中提取计划。
答案 2 :(得分:1)
简单地说,执行计划是对查询将如何完成的解释,而不是查询中涉及的实际数据(因此,当您重新运行查询时,可以反复应用执行计划)。 / p>
一个类比就是说执行计划与食谱类似 - 它是获取数据/制作餐食的方法,而不是数据/餐食本身。
改进之处在于数据库引擎需要时间来计算查询的执行计划,因此如果缓存它,则下次运行相同的查询时不需要开销。
答案 3 :(得分:0)
当您向SQL提交查询时,它会执行一些步骤来显示结果。主要是解析,algebrizer和查询优化器。
查询优化器负责构建执行计划,或者从缓存中选择一个执行计划,据我所知,构建计划的过程非常昂贵,因此如果您可以重用它,则更好。
主要观点是exec计划本身不包含数据,只是从BD中检索数据的方式。因此,一旦计划被“定义”,它就会被传递到存储引擎并用于检索数据。