Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как оптимизировать запрос из 54 JOIN'ов?  [new]
Alexei Bouravtsev
Member

Откуда: Москва
Сообщений: 10
Есть унаследованное приложение на Delphi, с помощью которого пользователь может создавать различные запросы к базе данных на SqlServer 2000/2005.
Грубо говоря, галочками пользователь помечает те области, которые хочет "подсосать" из базы...
Запросная система реализовано довольно просто - каждой области соответствует свой JOIN...
Максимальное кол-во JOIN'ов может достигать 54-ех (!!!)
Помимо прочего пользователь может задавать различного рода фильтры по любым столбцам, даже такие некошерные по текстовым полям как %name%.
Пользователи жалуются на производительность таких запросов...

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

Вопрос, можно ли относительно безболезненно оптимизировать такого рода запросную систему?
Если нет, то как "болезненно" в этом случае можно поступить?

Есть ли что почитать в интернете на тему "жадный пользователь хочет выбрать все данные из БД мгновенно"? :)

Подумываем об асинхронном выводе результатов, но может быть есть более простые или эффективные решения?
2 июн 11, 18:52    [10755219]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать запрос из 54 JOIN'ов?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Собрать статистику по запросам, выделить наиболее частые/тяжелые, создать для них индексы.
2 июн 11, 18:59    [10755259]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать запрос из 54 JOIN'ов?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Из собственного опыта могу предположить, что при большом количестве JOINов
сервер не успевает определить их оптимальный порядок. Поэтому приходилось
подбирать его вручную. И применять хинт FORCE ORDER.
Но у меня-то были мои собственные, один раз построенные запросы.
А не сконструированные неизвестно кем и неизвестно как.
2 июн 11, 19:31    [10755393]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать запрос из 54 JOIN'ов?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
locky
Собрать статистику по запросам, выделить наиболее частые/тяжелые, создать для них ...
+1
Правильно, всё начинается с требований, их нужно выявить.
Дополнить тут мало что можно - копать от них ещё в другую сторону. Т.е. выявить и убрать ненужные "области", кривые лайки, уточнить User Guide советами. Зашедулить стандартные убойные отчёты, если есть.
2 июн 11, 19:55    [10755478]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить