1
声明函数波动是否IMMUTABLE会损害性能?
Postgres函数用波动性分类VOLATILESTABLEIMMUTABLE声明,或。众所周知,该项目使用内置功能的这些标签非常严格。并且有充分的理由。一个突出的例子:表达式索引仅允许IMMUTABLE函数,并且它们必须是真正不变的,以避免错误的结果。 用户定义的函数仍然可以自由地声明,如所有者选择的那样。该手册建议: 为了获得最佳的优化结果,您应该使用对它们有效的最严格的波动性类别来标记您的函数。 ...并添加了错误的波动率标签可能会出错的大量问题列表。 尽管如此,在某些情况下伪造的不变性还是有意义的。通常,当您知道该函数在您的范围内实际上是不变的。例: PostgreSQL是否支持“不区分重音”的排序规则? 除了对数据完整性的所有可能影响,对性能有什么影响?人们可能会认为声明一个函数IMMUTABLE只会对性能有所帮助。是这样吗? 声明功能波动会IMMUTABLE 损害性能吗? 让我们假设当前的Postgres 10缩小了范围,但是所有最新版本都很有趣。