powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Data Environment и загрузка формы
25 сообщений из 25, страница 1 из 1
Data Environment и загрузка формы
    #35797300
Sergey-D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
В Data Environment формы лежат курсоры на основе LocalView. Все параметризованные с NoDataOnLoad = .T. и обновляются через Requry("MyCursor"). Один курсор создается на основе довольно большой, для фокса, таблице - порядка 5 000 000 записей.
Собственно вопрос. Requry("MyCursor") с указанными параметрами отрабатывает приемлемо быстро(1-2 сек). А вот при начальной зогрузке форма открываетя секунд 5-7. Причина, в числе прочих, может быть в размере базовой таблицы, т. к. при исскуственном ее уменьшеннии, форма открываетя быстро. Такое ощущуение, что фокс строит план запроса, по подобию SQL Server.
Какие у кого есть советы?
Спасибо.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35797324
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчто фокс строит план запроса, по подобию SQL Server

рассмешил

смотрим что говорит фокс про уровень оптимизации запроса,
читаем про бинарные индексы по делетед() при наличии 9-й версии
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798785
Sergey-D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы, но.
1. Запрос оптимизирован, т.к. при его выполнени с установленными параметрами (LocalView параметризованный) в процессе работы никаких претензий к производительности нет.
2. Если я правильно понимаю, бинарный индекс для deleted() в VFP 9.0 был специально создан, чтобы облегчить работу по управлению удаленными записями (если не так - поправьте), а в базовой таблице нет записей, помеченных на удаление.
3. Опять же, не уверен, но думаю, что при установленном свойстве NoDataOnLoad = .T., при загрузке формы никакие курсоры не должны обновляться.
4. Так вот, что фокс делает когда загружает форму, если при пустой базовой таблице, форма грузится быстро, а при большой - медленно?
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798819
Sergey-D4. Так вот, что фокс делает когда загружает форму, если при пустой базовой таблице, форма грузится быстро, а при большой - медленно?
Вот выяснением этого и надо заняться. Мы тут не видим вообще никаких таблиц и что-то подсказать не сможем.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798848
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора в базовой таблице нет записей, помеченных на удаление

авторЗапрос оптимизирован, т.к. при его выполнени с установленными параметрами (LocalView параметризованный) в процессе работы никаких претензий к производительности нет.

я попросил узнать мнение среды фокспро

почему Вы сделали вывод о том, что запрос оптимизирован? я могу сделать вывод
о том, что при соблюдении всех условий при опред.настройке среды
и то он будет только частично оптим-н при отсутствии указанного индекса.
наличие или отсутствие уд-х записей ни коим образом не влияет на наобход-ть
создания указанного индекса - ответы на вопросы Вы можете найти
в справочном рук-ве - понимание рашмора ...
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798920
Sergey-D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду разбираться.
Просто, для меня было очевидно, что оптимизирован запрос или нет, он не должен выполняться при открытии формы, если ему указали вообще не загружать никаких данных.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798952
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-DСпасибо, буду разбираться.
Просто, для меня было очевидно, что оптимизирован запрос или нет, он не должен выполняться при открытии формы, если ему указали вообще не загружать никаких данных.

Совсем это не очевидно. При NoDataOnLoad = .T. фоксу все равно надо создать курсор, только пустой. А как можно узнать типы и размеры полей не выполняя запрос? Он все равно выполняется, только в каком-то другом режиме.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798969
Sergey-D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и я думаю.
Механизм создания схемы не совсем понятен. Почему он зависит от размера базовой таблицы?
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35798992
Sergey-D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Глупость спросил.
Sorry.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35799058
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-DТак и я думаю.
Механизм создания схемы не совсем понятен. Почему он зависит от размера базовой таблицы?
Ни разу не пробовал использовать NoDataOnLoad = .T. с DBF.
Чего там реально делает фокс - врядли кто-то знает кроме разработчиков. Тут только опытным путем искать наиболее быстрый вариант.

Можешь взять FILEMON и посмотреть чего и сколько фокс читает из файлов.

Возможно какой-другой код еще выполняется и тормоза от него.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35799088
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсе параметризованные с NoDataOnLoad = .T.

абсолютно бесполезные танцы.
если нужно загрузить парам-й запрос пустым то и так делаем

select * from where &pcWhere

pcWhere = '.f.'

с таким условие и поднимаем
курсор загрузится пустым

затем меняем
pcWhere = 'tt=1 and .....' и загузятся по условию
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35799724
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо
select * from where &pcWhere

pcWhere = '.f.'

с таким условие и поднимаем
курсор загрузится пустым



Саня, не городи ерунды.

Фоксу при таком условии pcWhere = '.f.' придется просканировать всю таблу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET DELETED OFF 
CREATE CURSOR test (f1 int )

INDEX on f1 TAG f1 

APPEND BLANK IN test 

SYS( 3054 , 11 )
i =  0 
SELECT *, f() FROM test WHERE .f. INTO ARRAY arr
?i
i =  0 
SELECT * FROM test WHERE f1 =  1  INTO ARRAY arr
?i

FUNCTION f()
i = i +  1 
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35799771
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фу ёлки палки пример обращений не оттуда выдрал да ещё с ошибкой , ну собственно говоря Rushmore всё показывает.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35799980
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСаня, не городи ерунды.

вот пример, скана я не вижу,
где ошибка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
_SCREEN.Cls()

create cursor pp (id i autoinc, fff c( 10 ))
for i= 1  to  1000 
	insert into pp (fff) values ('')
endfor
index on deleted() tag del binary

public PPP
PPP= 0 
set deleted off
SYS( 3054 , 12 )
lnTime = seconds()
select *, FFF() from pp where .f. into array tt
? seconds()-lnTime
? PPP
return

function FFF
PPP=PPP+ 1 
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35801156
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не могу найти тему с Игорем Королевым, ну да ладно.

Вот код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
_SCREEN.Cls()

create cursor pp (id i autoinc, fff c( 10 ))
for i= 1  to  1000 
	insert into pp (fff) values ('')
endfor
index on deleted() tag del binary
INDEX on fff() TAG fff

public PPP
PPP= 0 
set deleted off
SYS( 3054 , 12 )
? SPACE( 10 )
select *, FFF() from pp where .f. into array tt nofilter
? SPACE( 10 )
select *, FFF() from pp where fff() =  0  into array tt nofilter
? SPACE( 10 )
select *, FFF() from pp where .f. AND fff() =  0  into array tt nofilter
return

function FFF
PPP=PPP+ 1 
RETURN ppp

Обрати внимание, что второй селект имеет оптимизируемое выражение, а третий селект уже частично оптимизированное выражение - такое поведение описано в хелпе Using Rushmore Query Optimization to Speed Data Access
Код: plaintext
Fully Optimizable  AND Not Optimizable  Partially Optimizable
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802405
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PaulWist

я не понимаю что мне хочете доказать
и понимать пока не желаю

я продемонстировал пример
и указал на использовании where .f.
рез-т выполнения примера показал отсутствие сканирования таблицы,
при усттановке set dele on оптимизатор использует бинарн. индекс,
запрос выполняется мгновенно.

это доказывает возможность использования
для быстрой загрузки пустого курсора такого подхода
(указания в запросе where .f.)

зачем мне показаны 3 варианта ограничения с
вызовом ф-и я не понимаю и это не имеет никакого отношения
к конкретно указанной возможности (where .f.)
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802550
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо
зачем мне показаны 3 варианта ограничения с
вызовом ф-и я не понимаю и это не имеет никакого отношения
к конкретно указанной возможности (where .f.)

Что бы показать, что where .f. является неоптимизируемым выражением, те для определения соответствия данному условию надо просканировать всю таблу.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802843
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз пример выполните и посмотрите

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
_SCREEN.Cls()

create cursor pp (id i autoinc, fff c( 10 ))
for i= 1  to  1000 
	insert into pp (fff) values ('')
endfor
index on deleted() tag del binary

public PPP
PPP= 0 
set deleted on
set talk on
SYS( 3054 , 12 )
*? SPACE( 10 )
select *, FFF() from pp where .f. into array tt nofilter
#if .f.  && .t.
ppp= 0 
? SPACE( 10 )
select *, FFF() from pp where fff() =  0  into array tt nofilter
? ppp
ppp = 0 
? SPACE( 10 )
select *, FFF() from pp where .f. AND fff() =  0  into array tt nofilter
#endif
? ppp
return

function FFF
PPP=PPP+ 1 
RETURN ppp

и не понимаю смысла последних 2-х запросов
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802885
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Комбинация неоптимизируемого where .f. и оптимизируемого fff()=0 дает частично оптимизируемое выражение.

Если бы where .f. AND fff() = 0 состояло бы из полностью оптимизируемых выражений, то фокс бы выдал full-оптимизацию, а этого не происходит, значит выраженеи where .f. является не оптимизируемым - отсюда следует, что фокс не может применить ни какой индекс и вынужден сканировать табличку.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802895
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример запускали?

? ppp

скорость выполнения?
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802911
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запускал.

ppp = 1 потому, что фокс делает нулевой прогон по структуре таблицы, что бы определить тип возвращаемых данных.

А оптимизации всё равно нет, да попытался фокс использовать индекс по deleted() и то потому, что мы ему сказали прячь удаленные данные, обнаружил, что удаленных данных нет и начал сканировать таблу - иначе бы он сказал, что Rushmore - full
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802920
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорость выполнения?

авторppp = 1 потому, что фокс делает нулевой прогон по структуре таблицы,

так или по всем записям бежит?
так почему ppp = 1 ?
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802925
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоскорость выполнения?

авторppp = 1 потому, что фокс делает нулевой прогон по структуре таблицы,

так или по всем записям бежит?
так почему ppp = 1 ?

А почему он должен быть не один, ведь в выборке нет записей удовлетворяющих условию where .f., соответственно ppp прирос из-за нулевого прогона.
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802929
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно из-за этого мы не можем получить счетчик сканирования, фокс открывает таблу в другом алиасе и чихает на нашу ф-ию, можно посмотреть о скане только по full, non, partitial
...
Рейтинг: 0 / 0
Data Environment и загрузка формы
    #35802939
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорость выполнения?

еще раз обратите внимание на этот критерий
поэтому для решения задачи получения пустого курсора
в фокспро имеет право на жизнь
решение с where .f. в запросе
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Data Environment и загрузка формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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