ник: osmor
ну вот некоторое резюме.
Самый быстрый это конечно BINARY, но при этом база вырастает 2 в раза
расчет битовой маски "на лету", очень медленно
Добавление текстового поля с битовой маской дает увеличение размера бд примерно на 10%
Учитывая что значения этих полей у меня один фиг до этого формируются из других полей посимвольной обработкой (той про которую я прошлый раз спрашивал http://hiprog.com/forum/read.php?id_forum=1&id_theme=5477&page=6), то решил использовать битовую маску
Вот примерно функция
Public Function CaseToBin(strParam As String) As Variant
Dim U() As Byte
Dim L() As Byte
Dim i As Integer
Const ZERO As String = "0"
Const ONE As String = "1"
CaseToBin = String(Len(strParam), ZERO)
Dim intStep As Integer
intStep = LenB("A")
U() = UCase(strParam)
L() = strParam
For i = 0 To UBound(U) Step intStep
If U(i) = L(i) Then Mid$(CaseToBin, i / intStep + 1, 1) = ONE
Next
End Function
|
А вот время ее работы с апдейтом через рекордсет 34 тыс записей (10 проходов)
CaseToBin 1 - 4085 ms
CaseToBin 2 - 3756 ms
CaseToBin 3 - 2974 ms
CaseToBin 4 - 3415 ms
CaseToBin 5 - 3715 ms
CaseToBin 6 - 4867 ms
CaseToBin 7 - 2454 ms
CaseToBin 8 - 3625 ms
CaseToBin 9 - 5748 ms
CaseToBin 10 - 4537 ms
Сумма - 39 186 ms