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

Откуда:
Сообщений: 72
Имеются работники (employees) и отделы (departaments), один работник может принадлежать нескольким отделам. Соответственно таблицы
employees (id, name, ...), departaments(id, name,...), employee_departament(id, employee_id, departament_id).
Предполагается что данные будут изменятся редко, будут часто производится выборки с фильтрацией по принадлежности работника к отделу (и полям таблицы employees).
Сейчас в таблице employees есть поле departaments, которое формируется при добавлении записи в виде строки вида '...;dept_id1;dept_id2;dept_id3;...' (т.е. ч.з. точку с запятой перечисляются идентификаторы отделов), и поиск осуществляется по условию вида:
select * from employees where name like '%aaa%' and ... and (departaments like '%;3;%' or departaments like '%;5;%' ...)
Предполагается заменить на
select * from employees e
left join employee_departament ed on e.id = ed.employee_id
where e.name like '%aaa%' and ... and ed.departament_id in (3, 5, ...)...
Будет ли заметный рост быстродействия?
3 ноя 09, 11:36    [7875497]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
А сделать по нормальному через деревья нельзя?
А то условие like '%aaa%' больно нехорошее.

ПО сабжу, в первом приближении условие
and ed.departament_id in (3, 5, ...)...
намного лучше условия
(departaments like '%;3;%' or departaments like '%;5;%' ...)
3 ноя 09, 11:45    [7875558]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Вот это
drewha
where ... and ed.departament_id in (3, 5, ...)...
в сочетании с
drewha
left join employee_departament ed...
Вы на правильность результата тестировали?
3 ноя 09, 11:46    [7875570]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
drewha
Member

Откуда:
Сообщений: 72
Паганель,

ошибся, во втором запросе select distinct.
3 ноя 09, 12:32    [7875920]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
drewha
Member

Откуда:
Сообщений: 72
--__Александр__--
А сделать по нормальному через деревья нельзя?
А то условие like '%aaa%' больно нехорошее.
Это пока меняется.

ПО сабжу, в первом приближении условие
and ed.departament_id in (3, 5, ...)...
намного лучше условия
(departaments like '%;3;%' or departaments like '%;5;%' ...)

Даже несмотря на то, что появляется join?
3 ноя 09, 12:34    [7875936]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
Лучше один join с "нормальным" условием поиска, чем N UNION-ов с такими лайками.
А вообще - сгенерите тестовые данные и сраните планы запросов.
3 ноя 09, 13:26    [7876505]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить