Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 00:16   #1
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию Оптимизировать sql запрос

Всем здравствуйте!
Короче, есть запрос:
Код:
SELECT en.zno, i.invno, I.depno, I.contno, Ic.ordno,
  /*Ic.w, Ic.h,*/ ic.qty, C.clname, I.InvN, I.findate, o.constno,
  gl.elemno, gl.gno, o.cornx3, o.cornx2, o.corny2, o.corny1, ocn.gabw,ocn.gabh, a.artikl
  FROM (expstarts es INNER join expstn en on es.zid=en.zid)
  INNER JOIN invspec Ic on es.invno=ic.invno and es.depno=ic.depno and es.ordno=ic.ordno
  INNER join (invoices I inner join clients C on C.clnum=I.clnum
  and C.cldep=I.depno) on (I.invno=Ic.invno and I.depno=Ic.depno)
  INNER join ords o on (i.invno=o.invno and i.depno=o.depno and ic.ordno=o.ordno)
  INNER join ordcnstr ocn on (o.invno=ocn.invno and o.depno=ocn.depno and o.ordno=ocn.ordno
  and ocn.consno=o.constno) /* o.constno неиндексированное */
  INNER join ordglp gl on (gl.invno=o.invno and gl.depno=o.depno and gl.ordno=o.ordno
  and gl.elemno=o.elno and gl.gno<>0)
  INNER join artikls a on (a.artno=gl.artno)
  WHERE en.zno=7 and i.findate='27.05.2010 00:00' and o.typel=1
  ORDER BY i.invno, ic.ordno, gl.elemno, ocn.consno, gl.gno
Нужно его оптимизировать... На выполнение уходит ~250 мс, а можно сделать 0...
База Firebird, в IBExperte в анализе производительности показывает, что производится 88908(!) не индексированных чтений таблицы ordglp

Адаптированный план:
PLAN SORT (JOIN (GL NATURAL, ES INDEX (FK_EXPSTARTS), EN INDEX (INTEG_259), A INDEX (INTEG_278), I INDEX (INTEG_64), C INDEX (INTEG_13), O INDEX (INTEG_136), OCN INDEX (INTEG_116), IC INDEX (INTEG_72)))
Hottabych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
запрос sql sleeper_Izh SQL, базы данных 2 20.06.2008 11:27
Как оптимизировать запрос MySQL с выборкой из двух таблиц. Johnatan SQL, базы данных 6 13.04.2008 03:10
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15