我正在比较在视图或存储过程中运行复杂的选择查询。
我听说当我将查询放入存储过程时,它将被预编译,这将减少运行时间,因为它会保存执行计划。
我没有尝试这两种方法,但我想知道哪种方法更好。
最佳实践是什么?
PL/pgSQL 函数中的静态 SQL 语句(如果要返回数据,您必须谈论函数,而不是过程)可以在数据库会话期间缓存执行计划。这可以节省您在执行查询时计算执行计划的精力。
但是,如果查询成本很高,则规划时间将只占查询执行时间的一小部分,并且收益可以忽略不计。因此,如何做并不重要,我的建议是从应用程序或数据库维护的角度选择最方便的方法。
要亲自查看,请使用
EXPLAIN (ANALYZE)
运行查询。然后,您可以获得报告的查询计划时间和执行时间,并可以评估减少前者是否会对您的整体性能产生影响。