powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка таблиц с большим объемом
10 сообщений из 10, страница 1 из 1
Обработка таблиц с большим объемом
    #39891016
kisel_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!
Помогите, дайте совет идею, или просто направление. Суть: необходимо ускорить проведение последовательных простых математические операций (умножить, разделить и взять общее количество по категориям) в таблице объемом 120 тыс. записей, а то ну очень медленно (порядка 1 мин). Спасибо.
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891020
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET ORDER TO ...
SET KEY TO ....
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создание индекса возможно поможет. Точнее сложно сказать не видя что именно у тебя происходит, надо пример кода, который тормозит.
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891029
kisel_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Penner,
Большое спасибо за совет, но подскажи как это может ускорить обработку 120 тыс записей, если есть необходимость обработать все записи без ограничения?
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891037
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kisel_odessa
есть необходимость обработать все записи

Тут только монопольно открывать таблицу, так чтение гораздо быстрее.
Если монопольно нельзя, то select в курсор и дальше с курсором работать.
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891052
kisel_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
так и есть, открываются данные монопольно в курсоре, причем они берутся из объединенного массива данных, выборка по дате, но простые конструкции:
*
*
SELECT table1
*
DO WHILE .T.
IF EOF()
EXIT
ENDIF
***
SELECT table2
SUM table2.kol_izd FOR ************ TO gnNNT
***
REPLACE table1.k_cc WITH gkEtk FOR nazva = Nnazva
***
SELECT table1
SKIP 1 IN table1
ENDDO

работают очень медленно.
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891062
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kisel_odessa
Dima T,
так и есть, открываются данные монопольно в курсоре, причем они берутся из объединенного массива данных, выборка по дате, но простые конструкции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
*
*
SELECT table1
*
DO WHILE .T.
	IF EOF()
		EXIT
	ENDIF
***
	SELECT  table2
	SUM  table2.kol_izd FOR ************ TO gnNNT
***
	REPLACE table1.k_cc WITH gkEtk FOR nazva = Nnazva
***
	SELECT table1
	SKIP 1 IN table1
ENDDO



работают очень медленно.

Для выделения кода есть тэг [ SRC ]
Причины тормозов выделил, надо индексы для оптимизации FOR, иначе каждый раз полный перебор всех записей. Для table1 добавь индекс по nazva
Код: sql
1.
2.
use table1 excl
index on nazva tag nazva


Про table2 не могу ничего сказать
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891072
kisel_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Спасибо большое, буду пробовать, честно, не ожидал... Результат обязательно сообщу.
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39891424
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kisel_odessa,
А если б рассказал задачу целиком, то возможно, можно найти решение без while.

Что было бы правильно, при работе с БД.
И полагаю, 120т много, только кажется. Это ОЧЕНЬ мало!!!
А вот 1 мин, это да, долго)))

Только советую начинать, с постановки задачи, и решать ее через множества.
В общем при работе с БД, советую переходить на декларативное программирование, и постараться избегать циклов (что всегда медленнее)
...
Рейтинг: 0 / 0
Обработка таблиц с большим объемом
    #39892230
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kisel_odessa,

только индексы с прицелом на оптимизацию запроса. для анализа оптимизации используй sys(3054)

как вариант можно рассмотреть sum, calc while for тут может быть большая свобода, частично использовать индексы построенными на базе выражений. В этом случае я бы рассмотрел вариант построения скрипта и его выполнения, но это если посчитать нужно фиг знает что и фиг знает как.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка таблиц с большим объемом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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