Big-O в базе данных с UDF - PullRequest
       44

Big-O в базе данных с UDF

0 голосов
/ 25 сентября 2019

Я хочу использовать UDF для связи таблиц в базе данных.Я не уверен, что это повлияет на скорость моего запроса.

Из того, что я прочитал, запросы имеют обозначение Big-O, в максимуме log (n).Это для поиска по дереву.Если бы я добавил 14 строк кода для каждой проверки, я думаю, что это все равно сохранит алгоритм в log (n).Это правильно?

Должен признаться, я не использовал UDF в запросе.Не могли бы вы использовать UDF в предложении ON?Или вы бы использовали его в предложении 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

1 Ответ

0 голосов
/ 25 сентября 2019

Вы упрощаете проблему.Запросы в общем случае не имеют сложности "в максимуме, log (n)".Алгоритм поиска двоичного дерева делает, но есть много других вещей, происходящих, когда запрос выполняется, и план выполнения может даже не включать поиск двоичного дерева.Последнее, скорее всего, будет иметь место, если в предикате используется пользовательская функция.

Создайте функцию, напишите запрос и посмотрите на ее план выполнения - это единственный надежный способ оценить еесложность и влияние функции на производительность запроса.

...