powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация по скорости добавлением поля?
13 сообщений из 13, страница 1 из 1
Оптимизация по скорости добавлением поля?
    #32576823
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый год.
Есть в наличии:
Таблицы:
MAIN(
id integer, /*Primary Key*/
info varchar(16), /*индексировано*/
....
)

RES(
id integer, /*Primary Key*/
main_id integer, /*внешний ключ к MAIN.ID*/
summa,
val1 integer,
val2 integer,
...
)

declare variable v_info varchar(16)

в блоке
FOR SELECT .... form MAIN m
INTO :v_info
DO
выполняется запрос вида:
select count(r1.id), sum(r1.summa) from RES r1,m1
where m1.id=r1.main_id and m1.info=:v_info and r1.val1=0 and r1.val2=1
into :SUM01

Собственно вопрос: выборка получается ну ооочень длительной,
основные расходы получаются, насколько японимаю, из-за связки
m1.id=r1.main_id and m1.info=:v_info
1. Намного ли ускорится, если добавить в подчинённую таблицу RES поле info (равное полю родительской записи, соответственно) ?
2. могу ли в приведенном примере вместо
m1.info=:v_info
писать
m1.info=m.info ?
3. какие ещё возможные варианты?
PS. заменить тип поля info на числовое или использовать другое поле для группировки - не подходит.

Спасибо за внимание.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32576862
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому, что запрос кривой - с закидыванием правой ноги через левое плечо и кувырком через голову.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for select m.id
     from main m
     where ...
     into :id_main
   do
    select sum(r.summa)
    from res r
    where r.id_main = :id_main
       and r.val1 =  0 
       and r.val2 =  1 
    into :s
или
Код: plaintext
1.
2.
3.
4.
5.
6.
    select sum(r.summa)
    from main m, res r
    where r.id_main = m.id
       and r.val1 =  0 
       and r.val2 =  1 
       and m.info = ... 
    into :s
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32576975
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Zmeishe
наверно, не полный вопрос получился.
Уточняю :)
Таблицы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
MAIN(
id integer,  /*Primary Key*/ 
info varchar( 16 ),  /*индексировано*/ 
val1 integer,
val2 integer,
mval1 integer,
....
)

RES(
id integer,  /*Primary Key*/ 
main_id integer,  /*внешний ключ к MAIN.ID*/ 
summa,
val1 integer,
val2 integer,
rval1 integer,
rval2 integer,
...
)

при этом для всех подчинённых соблюдается
RES.val1=MAIN.val1,
RES.val2=MAIN.val2,
а вот поля info и mval1 - только в таблице MAIN
поля rval1,rval2 - только в RES

параметры процедуры: PARAM1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
FOR SELECT m.info,m.val1,m.val2,count(m.id),sum(m.summa) form MAIN m 
where m.mval1=:param1 and ....
GROUP BY m.info,m.val1,m.val2
ORDER BY m.info,m.val1,m.val2
INTO :v_info, :M_VAL1,:M_VAL2, :M_CNT, :M_SUM
DO
  ...
  select count(r1.id), sum(r1.summa) from RES r1,m1
  where m1.id=r1.main_id and m1.info=:v_info and m1.mval1=:param1 
     and r1.val1=:M_VAL1 and r1.val2=:M_VAL2 
     and r1.rval1= 0  and r1.rval2= 0 
  into :CNT01,:SUM01
   ...
т.е. группировка по полю m.info, m.val1,m.val2
и параметр процедуры, присутствующий только в MAIN
но пока писал это всё, возникла мысль что даже при такой постановке
вариант, предложенный Zmeishe может подойти. подскажите, плиз.
PS. Допустим вариант с дублированием полей MAIN.mval1 и MAIN.info в подчинённой таблице. Ваше мнение?
спасибо за внимание.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32576982
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уточнение: в запросе читать:
Код: plaintext
1.
select count(r1.id), sum(r1.summa) from RES r1, MAIN m1
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577214
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, судя по всему вариант Zmeishe не подходит из-за группировки.
Подскажите плиз, имеет ли смысл дублирование полей в подчинённой таблице?
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577267
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonnyПодскажите плиз, имеет ли смысл дублирование полей в подчинённой таблице?
зачем??? для упрощения написания запросов??? тогда может и справочные таблицы в болото выкинуть, чтобы с ссылочной целостностью не возиться???
ИМХО создавать в таблице 2 поля с идентичной информацией не надо...
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577298
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFзачем??? для упрощения написания запросов??? тогда может и справочные таблицы в болото выкинуть, чтобы с ссылочной целостностью не возиться???
ИМХО создавать в таблице 2 поля с идентичной информацией не надо...

нет, для Ускорения выборки. Требование такое: создать бумажный отчёт на основе таблицы MAIN (125 тыс записей) и RES (процентов нв 20 больше)
сгруппировав по приведенным полям. Результат - около 18-40 тыс записей (в зависимости от условий).
Это всё печатается на бумаге :)

требуется максимально минимизировать время генерации отчёта.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577412
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не пойму, какие тут проблемы с группировкой?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
for select r.info, r.val1, r.val2, count(*), sum(r.summa)
    from main m, res r
    where m.id = r.id_main
       and m.mval1=:param1
       and r.val1 =  0 
       and r.val2 =  1 
       and m.info = ... 
    group by r.info, r.val1, r.val2
    into :i, :v1, :v2, :c, :s
  do ... 
Остальное рули индексами.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577455
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonnyнет, для Ускорения выборки.
поясни, как может ускорить выборку увеличение кол-ва полей???
да и есть уже в этой таблице поле с такими данными, зачем дублировать???
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32577519
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheЯ не пойму, какие тут проблемы с группировкой?

прошу посмотреть пост 765124, я там уточнил задачу.
FOR...SELECT идёт по таблице MAIN, а между DO BEGIN...END одна из выборок (а точнее 3 из 6ти) идут по таблице RES
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32583677
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что, никто не подскажет?
ответте, плиз - не хочу без "авторитетного" мнения базу курочать.
Спасибо.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32584273
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Результат - около 18-40 тыс записей (в зависимости от условий).
Это всё печатается на бумаге :)
требуется максимально минимизировать время генерации отчёта.
Если это все печатается на бумаге, то незачем ускорять -
печать все равно будет доооолгой.

авторПодскажите плиз, имеет ли смысл дублирование полей в подчинённой таблице?
нет, не имеет.
...
Рейтинг: 0 / 0
Оптимизация по скорости добавлением поля?
    #32584643
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил поля в подчинённую таблицу.
Формирование всех отчётов - аналогичное, 6 подзапросов с функциями Count(),Sum() на каждую строку выборки, 3 из них - по условию, в котором участвует родительское поле.

Результат 1: По одному из отчётов время формирования:
было: 2 мин 30 сек
стало: 9 сек
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация по скорости добавлением поля?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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