选择性和开销函数

您可以使用 CREATE FUNCTION 语句来创建 UDR。然后,您可以使用例程修饰符来更改在该语句中指定的开销或选择性。

创建 UDR 之后,您可以将它放在 SQL 语句中。

以下示例显示可以如何将 UDR 放置在 SQL 语句中:
SELECT * FROM image 
WHERE get_x1(image.im2) and get_x2(image.im1)

如果没有其他信息,优化器无法精确估计执行 UDR 的成本。您可以向优化器提供函数的成本和选择性。数据库服务器将成本和选择性一起使用,以确定最佳路径。 有关选择性的更多信息,请参阅使用用户定义的例程的过滤器

在前面的示例中,优化器无法确定首先执行哪个函数,是先执行 get_x1 函数,还是 get_x2 函数。如果函数执行成本太高,那么 DBA 可以为函数分配较高的成本或选择性,这可以影响优化器更改查询计划以获取更好的性能。在前面的例子中,如果 get_x1 的执行成本更高,DBA 可以为该函数分配更高的成本,这会使得 优化器首先执行 get_x2 函数。

您可以将以下例程修饰符添加到 CREATE FUNCTION 语句,以更改优化器分配给函数的成本或选择性:

有关开销或选择性修饰符的更多信息,请参阅 GBase 8s 用户定义的例程与数据类型开发者指南