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

Откуда:
Сообщений: 61
Добрый день. Не получается никак уменьшить скорость выполнения SQL запроса, так как щас он на вложенных in и еле дышит. Требуется ваша помощь и опыт.

Есть таблица1 следующего вида:

поле1 (текст, имя проекта, значения повторяются)
поле2 (текст, наименование оборудования, значения повторяются)
поле3 (текст, количество этого оборудования в цифрах, значения тоже могут повторяться).

Нужно посчитать количество оборудования для многих вхождений наименования оборудования для каждого имени проекта, по типу:

select поле1,SUM(CAST([поле 2] as float)) from project where поле2 like '%ищем1%' or поле2 like '%ищем2%' поле2 like '%ищем3%'

В результате должна быть колонка с именем проекта в котором были бы и ищем1, ищем2, ищем3, 2 колонкой и последующими сумма для каждого наименования оборудования
20 июн 17, 17:21    [20578218]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Moneo
Не получается никак уменьшить скорость выполнения SQL запроса
Странное желание.
Обычно хотят наоборот.
20 июн 17, 17:29    [20578238]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Спросите у архитектора вашей базы.
20 июн 17, 17:29    [20578242]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
А еще он суммирует текст. Странно, что у него запрос выполняется.
20 июн 17, 17:54    [20578295]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7752
Руслан Дамирович,

некоторый текст -то можно преобразовать. Задача нетривиальная и оптимально решается не средствами SQL.
20 июн 17, 17:57    [20578301]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Владислав Колосов
Руслан Дамирович,
некоторый текст -то можно преобразовать. Задача нетривиальная и оптимально решается не средствами SQL.

SUM(CAST([поле 2] as float))
поле2 (текст, наименование оборудования)
при таком стечении обстоятельств ему очень повезло, что конвертируется
20 июн 17, 18:00    [20578308]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Moneo
Добрый день... Требуется ваша помощь и опыт.

Нужно резать, не дожидаясь перетонита!
20 июн 17, 18:02    [20578310]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Moneo
Member

Откуда:
Сообщений: 61
Руслан Дамирович, по существу что-то будет или вы сюда поговорить пришли? В поле2 хранятся цифры, это тип поля текст, а точнее varchar. Запрос работает если делать отсеивание
select имя проекта,sum(cast(количество as float)) from таблица1 where наименование like '%ищем1%' and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем2%') and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем3%'), но это очень долго и в правой части при этом выводится сумма только для ищем1, а мне нужно чтобы выводило имя проекта где есть все ищем и в правой части сумма количества для каждого ищем.
21 июн 17, 00:45    [20579098]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Moneo
Руслан Дамирович, по существу что-то будет или вы сюда поговорить пришли? В поле2 хранятся цифры, это тип поля текст, а точнее varchar. Запрос работает если делать отсеивание
select имя проекта,sum(cast(количество as float)) from таблица1 where наименование like '%ищем1%' and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем2%') and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем3%'), но это очень долго и в правой части при этом выводится сумма только для ищем1, а мне нужно чтобы выводило имя проекта где есть все ищем и в правой части сумма количества для каждого ищем.
Модератор: Уважаемый Moneo. Прекращайте вещать в эфир поток вашего незамутненного сознания, а соизвольте выполнить п.4 и п.6 рекомендаций.
21 июн 17, 00:49    [20579099]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Добрый Э - Эх
Guest
Moneo
Руслан Дамирович, по существу что-то будет или вы сюда поговорить пришли? В поле2 хранятся цифры, это тип поля текст, а точнее varchar. Запрос работает если делать отсеивание
select имя проекта,sum(cast(количество as float)) from таблица1 where наименование like '%ищем1%' and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем2%') and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем3%'), но это очень долго и в правой части при этом выводится сумма только для ищем1, а мне нужно чтобы выводило имя проекта где есть все ищем и в правой части сумма количества для каждого ищем.

like %bla-bla-bla% - всегда небыстро.
про "где есть все ищем" - читать за реляционное деление. на SQL реализуется по разному - от [not] exists-подзапроса, до group by + having.
21 июн 17, 04:59    [20579171]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Moneo
Руслан Дамирович, по существу что-то будет или вы сюда поговорить пришли? В поле2 хранятся цифры, это тип поля текст, а точнее varchar. Запрос работает если делать отсеивание
select имя проекта,sum(cast(количество as float)) from таблица1 where наименование like '%ищем1%' and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем2%') and имя проекта in (select имя проекта from таблица1 where наименование like '%ищем3%'), но это очень долго и в правой части при этом выводится сумма только для ищем1, а мне нужно чтобы выводило имя проекта где есть все ищем и в правой части сумма количества для каждого ищем.

По существу, ваша база говно. Редкостное. Вы в силу своей неопытности этого не понимаете.
Помочь вам в вашей ситуации можно двумя путями. Бесплатный способ - читайте книги по теории баз данных, созданию модели области знаний, нормальным формам. Платный способ - от 1000р/ч любой специалист с этого форума приедет к вам и поможет спроектировать нормальную вменяемую базу.
Ну а пока, ваши кактусы - вы и жуйте.
21 июн 17, 09:50    [20579541]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Руслан Дамирович
Платный способ - от 1000р/ч любой специалист с этого форума приедет к вам и поможет спроектировать нормальную вменяемую базу.

Вы как то лихо на всех ставку объявили, особенно если учесть, что ехать куда то нужно. Думаю, существенная часть специалистов на такое не подпишется.
21 июн 17, 09:54    [20579565]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Minamoto
Руслан Дамирович
Платный способ - от 1000р/ч любой специалист с этого форума приедет к вам и поможет спроектировать нормальную вменяемую базу.

Вы как то лихо на всех ставку объявили, особенно если учесть, что ехать куда то нужно. Думаю, существенная часть специалистов на такое не подпишется.

Обратите внимание, что я описал нижнюю планку - за 1килорубль отправим к ним sqluser2 или a.tarannikova ;)
21 июн 17, 09:59    [20579578]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Minamoto,

Так написано же ОТ.
По теме, автора самого не напрегает: " В поле2 хранятся цифры, это тип поля текст, а точнее varchar". Для этого и придумали разные типы, а так да, в varchar считай все можно запихнуть особо не парясь как с этим потом работать.
21 июн 17, 09:59    [20579582]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
sum(cast(количество as float))
"Да за такое надо канделябром по голове !" (с) анек

Преобразования в больших запросах замедляют его раз в 10. Не говоря уже о риске ошибок конвертации
21 июн 17, 10:14    [20579616]     Ответить | Цитировать Сообщить модератору
 Re: Формирование и оптимизация SQL запроса  [new]
Гость, проходящий мимо
Guest
Moneo,
1. выполните преобразование типов до подсчета сумм и объединений с др. таблицами (если таковые ест), например используйте табличные представления (with т.е.)
2. если необходим подсчет сумм в группах смотрите в сторону sum() over (partition by)
21 июн 17, 12:25    [20580178]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить