|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
Доброго дня! Помогите, дайте совет идею, или просто направление. Суть: необходимо ускорить проведение последовательных простых математические операций (умножить, разделить и взять общее количество по категориям) в таблице объемом 120 тыс. записей, а то ну очень медленно (порядка 1 мин). Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 12:47 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
SET ORDER TO ... SET KEY TO .... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 12:58 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
Создание индекса возможно поможет. Точнее сложно сказать не видя что именно у тебя происходит, надо пример кода, который тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:02 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
Penner, Большое спасибо за совет, но подскажи как это может ускорить обработку 120 тыс записей, если есть необходимость обработать все записи без ограничения? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:06 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
kisel_odessa есть необходимость обработать все записи Тут только монопольно открывать таблицу, так чтение гораздо быстрее. Если монопольно нельзя, то select в курсор и дальше с курсором работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:15 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
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 работают очень медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:35 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
kisel_odessa Dima T, так и есть, открываются данные монопольно в курсоре, причем они берутся из объединенного массива данных, выборка по дате, но простые конструкции: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
работают очень медленно. Для выделения кода есть тэг [ SRC ] Причины тормозов выделил, надо индексы для оптимизации FOR, иначе каждый раз полный перебор всех записей. Для table1 добавь индекс по nazva Код: sql 1. 2.
Про table2 не могу ничего сказать ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:44 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
Dima T, Спасибо большое, буду пробовать, честно, не ожидал... Результат обязательно сообщу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 13:55 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
kisel_odessa, А если б рассказал задачу целиком, то возможно, можно найти решение без while. Что было бы правильно, при работе с БД. И полагаю, 120т много, только кажется. Это ОЧЕНЬ мало!!! А вот 1 мин, это да, долго))) Только советую начинать, с постановки задачи, и решать ее через множества. В общем при работе с БД, советую переходить на декларативное программирование, и постараться избегать циклов (что всегда медленнее) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2019, 08:04 |
|
Обработка таблиц с большим объемом
|
|||
---|---|---|---|
#18+
kisel_odessa, только индексы с прицелом на оптимизацию запроса. для анализа оптимизации используй sys(3054) как вариант можно рассмотреть sum, calc while for тут может быть большая свобода, частично использовать индексы построенными на базе выражений. В этом случае я бы рассмотрел вариант построения скрипта и его выполнения, но это если посчитать нужно фиг знает что и фиг знает как. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 10:55 |
|
|
start [/forum/topic.php?fid=41&fpage=6&tid=1581612]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
100ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 487ms |
0 / 0 |