database - 使用 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
解决方案
你把问题简单化了。查询通常不具有“at max, log(n)”的复杂性。二叉树搜索算法可以,但是执行查询时会发生更多其他事情,执行计划甚至可能不包括二叉树搜索。如果在谓词中使用用户定义的函数,则可能是后者。
创建一个函数,编写一个查询,然后查看它的执行计划——这是评估其复杂性和函数对查询性能的影响的唯一可靠方法。
推荐阅读
- python - 从另一个 Python 文件调用函数
- excel-formula - Power Automate:我想使用 Power Automate 将 Excel 文件 (OneDrive) 的日期和时间列移动到 SharePoint 列表
- node.js - Discord.JS / NodeJS | args 出错
- android - Firebase Analytics 不适用于 iO (Dart/Flutter)
- javascript - 想要将 gobal 过滤器放在 primeNg 表组件之外
- r - 如何在 R 中获得凝聚聚类的热图?
- javascript - 无法从容器连接到数据库
- azure-cosmosdb - 逻辑应用 > CosmosDB 错误从文档中提取的 PartitionKey 与标题中指定的不匹配
- python - 根据特定测量对股票进行排名
- spring-boot - Spring boot + Rabbit MQ 并行处理消息