|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
На вход в процедуру поступает множество параметров для фильтрации с мультивыбором. Это строки nvarchar(max), в которых через разделитель (запятую) перечислены GUIDы или int. Например, набор типов, статусов, объектов, по которым надо отфильтровать результирующий набор. Строчка разворачивается в столбец и "иннерджойнится" с той таблицей, которая подлежит фильтрации. Наприммер, так: Код: sql 1. 2. 3. 4. 5. 6. 7.
Варианты реализации функции pik_fn_GetTableFromParam, которая реализует разворачивает строку в столбец были испробованы разные, вплоть до встраивания запроса вовнутрь, без использования функции. Но такой фильтр в любом случае заметно тормозит работу. Чем больше значений в нём указано (через запятую), тем медленнее будет работать запрос. Если таких фильтров задано много, то беда-беда! Может есть более прогрессивные подходы решению к этой стандартной часто возникающей задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 16:59 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуру, на вход процедуры можно сразу передать параметр табличного типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:05 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуруЭто строки nvarchar(max), в которых через разделитель (запятую) перечислены GUIDы или int. И что формирует эти строки ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:07 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Shakillначинающий sql-гуру, на вход процедуры можно сразу передать параметр табличного типа. Это с клиентчиками ещё перетереть надо. Насколько им трудоёмко будет перепилить это со своей стороны. Но, наверное, профит того стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:08 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Gloryначинающий sql-гуруЭто строки nvarchar(max), в которых через разделитель (запятую) перечислены GUIDы или int. И что формирует эти строки ? Клиентское приложение. В нём пользователь делает либо мультиселект в гриде, либо ставит несколько галочек в выпадающем списке. Процедура вызывается с перечислением в строчку id выбранных пунктов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:16 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуруКлиентское приложение. В нём пользователь делает либо мультиселект в гриде, либо ставит несколько галочек в выпадающем списке. Почему бы клиентскому приложению не формировать на сервере таблицу вместо строк ? Которые все равно парсятся в таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:20 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Shakillначинающий sql-гуру, на вход процедуры можно сразу передать параметр табличного типа. У меня это реализовано так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Или лучше всё же пользоваться параметрами табличного типа ? (ms sql 2012) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:26 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
trew, смотрите сами. по быстродействию, удобству и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:38 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Gloryначинающий sql-гуруКлиентское приложение. В нём пользователь делает либо мультиселект в гриде, либо ставит несколько галочек в выпадающем списке. Почему бы клиентскому приложению не формировать на сервере таблицу вместо строк ? Которые все равно парсятся в таблицу Это как? Перед запуском основной процедуры выполнить из клиентского кода запрос на создание нескольких таблиц, содержащих фильтры? Причём с (пере)созданием отдельной таблицы для каждого пользователя, либо с записью информации опользователе и с текущей датой+временем воизбежание получения некорректных фильтров? Или я что-то не так понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:41 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Shakilltrew, смотрите сами. по быстродействию, удобству и т.д. Ну, если в 3,5 .NET-е есть способ приведения коллекций или DataTable к SQL-евскому типу табличной переменной, то это было бы здорово. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:43 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуруЭто как? Перед запуском основной процедуры выполнить из клиентского кода запрос на создание нескольких таблиц, содержащих фильтры? Хотя бы так ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2013, 17:47 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Gloryначинающий sql-гуруЭто как? Перед запуском основной процедуры выполнить из клиентского кода запрос на создание нескольких таблиц, содержащих фильтры? Хотя бы так таблицы-то наверное создавать не нужно, они будут предопределённые, а приложение в них будет напихивать строчки с идентификатором своей сессии и значениями параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2013, 01:16 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
Выяснил, что в последнем .NET-е есть SqlDbType.Structured - это как раз под передачу таблиц-переменных в процедуры (TVP). Но тут выясняется, что издержки на разворачивание строки в столбец ничтожно малы по сравнению с последующим джойном этого фильтра с основным набором. Так что однофигственно, походу, что передавать: строку, xml или TVP.(( ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2013, 11:35 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуру, но в табличной переменной можно сделать индексы. Глядишь, полегчает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2013, 11:40 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
iapначинающий sql-гуру, но в табличной переменной можно сделать индексы. Глядишь, полегчает.Хотя, при небольшом количестве записей ненамного ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2013, 11:41 |
|
Фильтры с мультиселектом. Как лучше реализовывать?
|
|||
---|---|---|---|
#18+
начинающий sql-гуруТак что однофигственно, походу, что передавать: строку, xml или TVP.((Да, по быстродействию неважно. Смотрите на удобство программирования, отладки, поддержки, защиты от взлома... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2013, 11:47 |
|
|
start [/forum/topic.php?fid=46&msg=38219993&tid=1707487]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 236ms |
total: | 396ms |
0 / 0 |