首页 > 解决方案 > 使用 UDF 的数据库中的 Big-O

问题描述

我想使用 UDF 链接数据库中的表。我不确定对查询速度的影响。

根据我的阅读,查询具有最大的 log(n) 的 Big-O 表示法。这是为了进行树搜索。如果我为每次检查添加 14 行代码,我认为这仍会将算法保持在 log(n)。那是对的吗?

我必须承认我没有在查询中使用 UDF。你能在 ON 子句中使用 UDF 吗?或者,您会在 WHERE 子句中使用它吗?每个选择对速度的影响是什么?

这是我正在考虑的函数(用 Excel VBA 而不是 Db2 编写的。)

Function ismymatch(needle As String, haystack As String)

num_to_match = 10

If Len(needle) < num_to_match Then
ismymatch = False
Exit Function
End If

For i = 1 To Len(needle) - num_to_match + 1

    If InStr(haystack, Mid(needle, i, num_to_match)) > 0 Then
        ismymatch = True
        Exit Function

    End If




Next

ismymatch = False



End Function

标签: databasealgorithmdb2time-complexitybig-o

解决方案


你把问题简单化了。查询通常不具有“at max, log(n)”的复杂性。二叉树搜索算法可以,但是执行查询时会发生更多其他事情,执行计划甚至可能不包括二叉树搜索。如果在谓词中使用用户定义的函数,则可能是后者。

创建一个函数,编写一个查询,然后查看它的执行计划——这是评估其复杂性和函数对查询性能的影响的唯一可靠方法。


推荐阅读