| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Стоит ли заменить сотни маленьких запросов |
| Автор: ivanfain 17.3.2012, 15:59 |
| Привет ребята. Использую mssql, но желательно, чтобы запрос был универсальным. Я разрабатываю элемент управления, который будет содержать определённое количество ячеек. От 100 до 1000 а может и более. Каждая ячейка делает, уникальный запрос к безе, точнее к DataSet. В каждом запросе уникальное сочетание фильтров. На данный момент элемент управления на несколько секунд замирает. Судя по всему, нужно поработать над производительностью. Идея такая, создать запрос, который вернёт все необходимые данные за один раз. Я полагаю, что очень много времени тратится на создание запроса-отправку-парсинг запроса в mssql. 1.Как вы думаете, если я вынесу все запросы в один, поможет ли это мне существенно повысить производительность? 2.Если да, то, как составить запрос таким образом, чтобы данные удобно было извлечь в программу, использую c#? Сейчас у меня получается что-то на подобии “select Count(*) from tb where column1=’text1’”. В результате я получаю список rows, которые очень удобно распарсить. А удобно вывести данные при построении большого запроса, и как этот запрос должен выглядеть? Допустим, я хочу чтобы в результате получилась таблица, где column1 – некий мой уникальный Id, который я передал в запрос и по которому найду данные для своей ячейки. И column2 – некий результат “select Count(*) from tb where column1=’text1’”. Надеюсь, суть изложил понятно. Спасибо. |
| Автор: ivanfain 17.3.2012, 18:39 |
| Я бы с удовольствием занялся бы, только запросы составить не получается. |
| Автор: Fortop 17.3.2012, 19:25 | ||||||
Ну для универсальности придется использовать что-то вроде LINQ или Hibernate
А так запросы будут весьма различны MySQL
MSSQL (не совсем эквивалент запроса выше. Эквивалент будет сложнее)
|
| Автор: ivanfain 17.3.2012, 19:39 |
| Мне бы получить таблицу таких данных col1 col2 некоте значение, переданное в запрос результат выполнения select Count(*) from tb where (некоторое условие) Добавлено через 1 минуту и 46 секунд Выводимые данные должны выглядеть примерно так col1 col2 1 23 2 0 3 0 4 12 5 7 6 3 7 0 8 0 Добавлено через 3 минуты и 22 секунды Linq может получится использовать, если пойму как запрос будет выглядеть в T-SQL. Но может и заморачиваться не стоит? Может не даст прироста производительности? |
| Автор: ivanfain 17.3.2012, 21:38 | ||
На данный момент пришёл к такому результату
Однако в данном случае я получаю две таблицы в DataSet. А лучше бы я получал записи. И мне вот не ясно, эти таблицы в DataSet это уже результат выполнения запроса, или запросы пойдут в базу после того как я обращусь к строкам таблицы? |
| Автор: Fortop 17.3.2012, 23:06 | ||||||
GROUP BY не? не пробовали?
Эм, это вам надо обращаться к своему языку на котором вы пишете. Данный топик совсем не о том. |
| Автор: ivanfain 18.3.2012, 14:39 | ||||
Совсем не понял как он может мне помочь. Например написал я такой запрос.
Здесь задействуется только один фильтр. Я могу конечно их добавить хоть 10, но один запрос я собираюсь использовать с одним набором фильтров, например по Item, а в другом Item даже не будет, будет Company. Как тогда? |
| Автор: Fortop 18.3.2012, 16:25 | ||
Тогда рисуйте динамические запросы |