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


я по наивности предполагала, что условия будет проверяться в указанной мною последовательности, но выполняется сначала функция - c пустым параметром XX не взирая, что Lg=.F. и поле ХХ пустое.
Может кто подскажет как мне "порядка добиться"
Заранее благодарю!
...
Рейтинг: 0 / 0
Where - jчередность
    #39924148
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не путаю, последовательность выполнения заявлена для условий типа 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
Where - jчередность
    #39924242
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людм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
Where - jчередность
    #39924248
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант от Dima_T c replace ALL выручил!
На обработку 5000 записей - не существенная разница по времени выполнения по сравнению с UPdate .
Зато всё понятно и под контролем!

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


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