Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Where - jчередность / 4 сообщений из 4, страница 1 из 1
08.02.2020, 00:24
    #39924110
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Where - jчередность
Бьюсь как "рыба об лёд" вторые сутки (
Оказывается:
Код: sql
1.
Update Temp set Lg=.F.,Prich=10 where Lg and !empty(xx) and FFunction(XX)


я по наивности предполагала, что условия будет проверяться в указанной мною последовательности, но выполняется сначала функция - c пустым параметром XX не взирая, что Lg=.F. и поле ХХ пустое.
Может кто подскажет как мне "порядка добиться"
Заранее благодарю!
...
Рейтинг: 0 / 0
08.02.2020, 11:07
    #39924148
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Where - jчередность
Если не путаю, последовательность выполнения заявлена для условий типа IF, SCAN и т.п. Для SQL запросов работает оптимизатор и он может поменять порядок проверки чтобы задействовать индексы.

1. Попробуй так
Код: sql
1.
replace in Temp Lg with .F., Prich with 10 for Lg and !empty(xx) and FFunction(XX)



2. Продублировать проверку в FFunction()
Код: sql
1.
... where Lg and !empty(xx) and FFunction(Lg, XX)


и в начало FFunction
Код: sql
1.
2.
3.
if !Lg or empty(xx)
   return .f.
endif
...
Рейтинг: 0 / 0
08.02.2020, 17:41
    #39924242
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Where - jчередность
Людмila
Бьюсь как "рыба об лёд" вторые сутки (
Оказывается:
Код: sql
1.
Update Temp set Lg=.F.,Prich=10 where Lg and !empty(xx) and FFunction(XX)


я по наивности предполагала, что условия будет проверяться в указанной мною последовательности, но выполняется сначала функция - c пустым параметром XX не взирая, что Lg=.F. и поле ХХ пустое.
Может кто подскажет как мне "порядка добиться"
Заранее благодарю!


Собственно, вы сами ответили на вопрос, если поля Lg and ХХ пустые, то оптимизатор для них может выбрать только поиск сканируя таблицу (для больших таблиц - это самый медленный вариант), у оптимизатора остаётся только один неизвестный предикат - это FFunction(XX), вот он (оптимизатор) пытается его сначала вычислить, что бы уменьшить количество отбираемых записей и применить сканирование для оставшейся части записей.
...
Рейтинг: 0 / 0
08.02.2020, 18:08
    #39924248
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Where - jчередность
Вариант от Dima_T c replace ALL выручил!
На обработку 5000 записей - не существенная разница по времени выполнения по сравнению с UPdate .
Зато всё понятно и под контролем!

Большое спасибо за помощь.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Where - jчередность / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]