powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Гляньте код, что то долго он работает ???
10 сообщений из 10, страница 1 из 1
Гляньте код, что то долго он работает ???
    #33422125
МНастя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

пишу код следующего содержания

SET DELETED ON
SELECT * from table1 ;
WHERE table1.ls=LnLs;
into CURSOR cur_table1 readwrite

SELECT cur_table1
INDEX ON STR(god,4)+STR(mes,2) TAG godmes
INDEX ON god TAG god
INDEX ON mes TAG mes


SELECT * from cur_table1;
WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod AND cur_table1.mes<=LnMes) AND ;
cur_table1.sis#0 AND cur_table1.post#0;
into CURSOR cur_cur_table1_one READWRITE



слишком долго выполняется, таблица сама весит примерно 1,8 Гига/байта

записей в ней несколько сот тысяч

выборка идет по лицевому счету, выполняется в течении 15-20 секунд,
а если поставить на компьютер скажем 486, то вообще мрак, может кто посоветует чего ???
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33422198
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МНастяВсем привет

пишу код следующего содержания

SET DELETED ON
SELECT * from table1 ;
WHERE table1.ls=LnLs;
into CURSOR cur_table1 readwrite

Таблица Table1 должна иметь индекс по полю table1.ls Причем IDXCollate() этого индекса должен совпадать с текущей настройкой SET COLLATE на момент выполнения запроса.

Если конечной целью является получение курсора cur_cur_table1_one, а курсор cur_table1 вообще не нужен, то и нечего в данном случае его создавать. Зачем лишняя перекачка, особенно если в cur_table1 относительно много записей?
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33423241
Bodom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объедините вместе два селеста в один.но это большой прирост конечно не даст. И возвращайте не выборку всех полей а только тех что вам надо.
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33423937
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут недавно поднимал вопрос о медленной работе Select - Мэтры много полезного посоветовали - почитайте я думаю проблема аналогична моей.
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33425108
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь индекс по deleted()
Выражение OR - не оптимизируется Rashmor
WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod
замени на
WHERE cur_table1.god<=LnGod
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33425282
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foxwizardДобавь индекс по deleted()
Во-первых, это приведет к оптимизации только при наличии настройки SET DELETED ON.
Во-вторых, в большинстве случаев, до версии VFP9 такой индекс не ускорит, а замедлит выполнение запроса.

foxwizardВыражение OR - не оптимизируется Rashmor
Оптимизируется. Но только в том случае, если оба выражения, объединенные через OR сами оптимизируются. Если одно из них не оптимизируется, то не оптимизируется и их объединение через OR.

Кроме того, предложенная замена приведет к искажению результата запроса. Исходный запрос это:

Код: plaintext
1.
2.
(cur_table1.god<LnGod) OR ;
(cur_table1.god=LnGod AND cur_table1.mes<=LnMes)

Заменить эту конструкцию на (cur_table1.god<=LnGod) не представляется возможным.
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33425374
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькое дополнение для VFP 5, индекс по DELETED() в этой версии необходим, подробности http://forum.foxclub.ru/read.php?f=5&i=98845&t=98195
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33426351
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не обратил внимания на скобку
WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod AND cur_table1.mes<=LnMes)

Кстати, открывающая скобка где?


Структуру table1 в студию. С описанием полей .
сколько записей в table1
и cur_table1 сколько после выборки по условию?
А еще лучше - что нужно получить в результате из table1ю
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33426357
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше - что нужно получить в результате из table1.
Простым человеческим языком: Я хочу , чтоб из table1 в результат попали записи,которые ......
...
Рейтинг: 0 / 0
Гляньте код, что то долго он работает ???
    #33428698
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Владимир!


> Кроме того, предложенная замена приведет к искажению результата запроса

Да, но если и в самой таблице есть индекс по STR(god,4)+STR(mes,2) то вполне
можно свести это условие к одному:

STR(god, 4)+STR(mes, 2) <= STR(?m.LnGod, 4) + STR(?m.LnMes, 2)

Или, что ещё лучше, посчитать предварительно значение STR(m.LnGod, 4) +
STR(m.LnMes, 2) и использовать в запросе уже его результат.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Гляньте код, что то долго он работает ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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