Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация запроса к DB2 [D7, DB2]


Оптимайзер ©   (2008-12-17 14:12:00) 

Подскажите новичку, как оптимизировать такой запрос?


select
DOCINP.DCINMB as DCINMB,
DOCINP.DCIDCK as DCIDCK,
DOCINP.DCICPY as DCICPY,
DOCINP.DCITYP as DCITYP,
DOCINP.DCICND as DCICND,
GMDOCTYPE.DOCS_ID as DOCTYPE,
GMDOCTYPE.SEND_AIM as SEND_AIM,
GMDOCTYPE.CHECK_INS as CHECK_INS
from  
            DISTDB.DOCINP DOCINP,
CLSDB.GMDOCS GMDOCS,
CLSDB.GMDOCTYPE GMDOCTYPE,
CLSDB.GMVER GMVER
where  
            (DOCINP.DPTCOD = :dptcod) and
(DOCINP.DCICND in ('ПРОВ', 'ПАЧК', 'ВКЛЧ')) and
(DOCINP.DCIERR = 'ПРАВ') and
((DOCINP.DCITRN is NULL) or (DOCINP.DCITRN = '')) and
(DOCINP.DCITYP = GMDOCS.TYPE) and
(GMDOCS.ID = GMVER.DOCID) and
(GMVER.VCODE = GMDOCTYPE.DOCS_ID) and
(GMVER.ACTIVE = 'Y')
order by
           DCINMB ASC, DCIDCK ASC, DCICPY ASC;


Petr V. Abramov   (2008-12-18 14:23:00) [1]


> Оптимайзер   (17.12.08 16:38) [12]

начни с
select * from DISTDB.DOCINP where  (DOCINP.DPTCOD = :dptcod)
начинай наворачивать остальное, посмотри, когда появятся тормоза.


ANB   (2008-12-17 17:55:00) [2]


> Оптимайзер   (17.12.08 16:38) [12]

Так оно и есть. Если тока одна толстая таблица, то надо бы повесить на нее индексы. И внимательно посмотреть связки - нету ли ненужного кортезиана (не забыл ли подвязать какую нибудь табличку).


Оптимайзер   (2008-12-17 16:38:00) [3]


> ANB   (17.12.08 16:28) [11]

Если бы это было так...


ANB   (2008-12-17 16:28:00) [4]


> Запрос может выполняться от секунды до 5-7 минут.

5-7 минут - первое выполнение.
Секунда - данные закэшировались и все летает.


Правильный$Вася   (2008-12-17 15:49:00) [5]


> DOCINP.DCICND in ('ПРОВ', 'ПАЧК', 'ВКЛЧ')) and  (DOCINP.DCIERR = 'ПРАВ') and

а это можно было бы и проиндексировать

> clickmaker ©   (17.12.08 14:32) [2]

смысла нет
поля 4-символьные, по длине - как обычное число
поэтому делать еще один справочник не оправдано, только добавит тормозов


Правильный$Вася   (2008-12-17 15:45:00) [6]

по первичному ключу не может не быть индекса, причем уникального
иначе субд просто не проконтролирует уникальность
не, теоретически полный перебор для ее проверки она может делать, но вряд ли db2 настолько тупая


Оптимайзер   (2008-12-17 15:18:00) [7]

В результате ожидается до сотни записей.

Что тормозит - неясно. Запрос может выполняться от секунды до 5-7 минут. Причина непонятна.


Sergey13   (2008-12-17 15:15:00) [8]

> [5] Оптимайзер   (17.12.08 15:00)
> Индексов нет.

Круто!


Оптимайзер   (2008-12-17 15:05:00) [9]

В таблицах есть еще и другие поля, но в данном запросе они не участвуют.


Оптимайзер   (2008-12-17 15:00:00) [10]

Таблица DISTDB.DOCINP - от полумиллиона до миллиона записей (и они продолжают довольно быстро накапливаться)
Поля:
DPTCOD - BigInt, PK
DCINMB - Double(11, 0), PK
DCIDCK - SmallInt, PK
DCICPY - SmallInt, PK
DCITYP - Char(4)
DCICND - Char(4)
DCIERR - Char(4)
DCITRN - Char(4)

Таблица CLSDB.GMDOCS - около сотни записей
Поля:
ID - BigInt, PK
TYPE - Char(4)

Таблица CLSDB.GMDOCTYPE - около сотни записей
Поля:
ID - BigInt, PK
DOCS_ID - BigInt, Unique
SEND_AIM - SmallInt
CHECK_INS - SmallInt

Таблица CLSDB.GMVER - несколько сотен записей
Поля:
DOCID - BigInt, PK
VCODE - BigInt, PK
ACTIVE - Char(1)

Индексов нет.


Кщд   (2008-12-17 14:43:00) [11]

>Johnmen ©   (17.12.08 14:41) [3]

DOCINP.DCITYP = GMDOCS.TYPE


Johnmen   (2008-12-17 14:41:00) [12]

Запрос вообще неверный. Т.к. как минимум нет связи таблицы DOCINP с остальными.


clickmaker   (2008-12-17 14:32:00) [13]

> 'ПРОВ', 'ПАЧК', 'ВКЛЧ'

это некий фиксированный набор или произвольные слова?
в первом случае я бы сделал справочник и искал бы по ID


Sergey13   (2008-12-17 14:28:00) [14]

Запросы обычно оптимизируются для КОНКРЕТНЫХ условий, а не просто так.
Что за таблицы, какие инедксы, сколько записей в таблицах и в результате? Что конкретно тормозит?


Наверх

Титульная страница Поиск, карта сайта Написать письмо