|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - украшаем запрос MS SQL |
|
Разное - украшаем запрос MS SQL
|
Ветеран Сообщения: 1180 |
Профиль | Отправить PM | Цитировать 1. можно ли как-то запустить Query Analyzer (2000) с ярлычка, чтоб он не заново запускался, а создал окошко в уже открытом аналайзере? А то задолбал плодиться, я забываю смотреть, есть он в живых или нет.
2. есть уже заполненная табличка: нужно оставить в ней записи, имеющие хотя бы одно пересечение с другими при одинаковой groupId. Остальные удалить. Я сделал, но мне кажтся чёто как-то некрасиво и медленно, через delete where not exists(...). Сами понимаете, некрасивые самолёты не летают. Есть варианты как причесать запрос? |
|
Отправлено: 15:18, 15-09-2008 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать остаётся вопрос с временными view. Можно такие сделать? На сколько это критично к ресурсам? у меня услуги - это
Временные - это в том смысле, чтобы они уничтожались после выхода из блока, где были созданы, независимо от того успешно прошла операция или нет |
Отправлено: 08:35, 18-09-2008 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Да, запрос у меня получился несколько однобокий.
AFAIK вьюхи интерпритируются примерно как макрос - т.е. хранится только код запроса, и он подставляется в другие запросы - содержимое view никак специально не индексируется, не кешируется и т.п. Можно использовать не view, а подзапрос: select * from (select * from accDebet join accCliPay on (accCliPay.accPayId=accDebet.accPayId and accCliPay.payCod=1)) as u1, (select * from accDebet join accCliPay on (accCliPay.accPayId=accDebet.accPayId and accCliPay.payCod=1)) as u2 where u1.dateIn>'2008-08-15' and u2.dateIn>'2008-08-15' -- 4 недели назад - лучше вынести в переменную and u1.groupId=u2.groupId2 and u1.recId<>u2.recId and u1.dateIn>=u2.dateIn and u1.dateIn<=u2.dateOut |
Отправлено: 16:56, 18-09-2008 | #12 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать когда идентичные - это нормально, нужно обе выдавать. Вот теперь красиво получилось! Пасиба *DRINK*. Единственное, со знаком ">=" всё-таки надо строгое ограничение (без , потому что если одна услуга заканчивается '2008-09-18 12:00' а другая начинается в это же время - это не пересечение
|
Отправлено: 07:41, 19-09-2008 | #13 |
Назгул Сообщения: 2633
|
Профиль | Отправить PM | Цитировать Цитата pva:
View, с точки зрения программиста - SQL-запрос/макрос хранимый на стороне сервера. С точки зрения видимости - таблица БД. Т. е. этакая виртуальная динамическая таблица. Т. к. View практически ничего не занимают, то смысла Создавать-Удалять их в процессе выполнения нет никакого. Более того, с точки зрения структурирования и изоляции кода это глупость. Хочу заметить, что связка нескольких View в одном запросе читабельнее чем один сложный запрос с join. Если вы хотите использовать конструкции управляемые в процессе выполнения, обратите внимание на хранимые процедуры. |
|
------- Отправлено: 11:02, 19-09-2008 | #14 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата kim-aa:
Цитата kim-aa:
|
||
Отправлено: 20:48, 20-09-2008 | #15 |
Назгул Сообщения: 2633
|
Профиль | Отправить PM | Цитировать Цитата pva:
Цитата pva:
Тоже не плохой выход, особенно с точки зрения, работы с высоконагруженными базами. Наверно, самый оптимальный случай особенно при очень сложных выборках. С точки зрения блокировок, "монолитный" запрос это самое печальное. |
||
------- Отправлено: 11:16, 22-09-2008 | #16 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата kim-aa:
Цитата kim-aa:
|
||
Отправлено: 14:03, 22-09-2008 | #17 |
Назгул Сообщения: 2633
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Естественно придется жертвовать памятью ради скорости, либо наоборот. Что касаемо индексов. Вроде бы человек туда уже агрегированные данные собирается выгружать? Если же нет, то вы правы, когда размер временной таблицы соизмерим с основной, то смысла это не имеет. Однако, повторюсь: 1) Лично я бы работал с View. 2) С MS SQL не работал давно, за сим мои мысли о проиводительности можно опустить, как ламерские |
|
------- Отправлено: 18:37, 22-09-2008 | #18 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата kim-aa:
Цитата Busla:
|
||
Отправлено: 07:02, 23-09-2008 | #19 |
Назгул Сообщения: 2633
|
Профиль | Отправить PM | Цитировать pva,
Может быть имеет смысл применить функции пользователя ? Будете передавать в нее две переменных (временной диапазон), получать таблицу. |
------- Отправлено: 10:40, 23-09-2008 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие БД - SQL запрос на выборку по дате | echo off | Программирование и базы данных | 1 | 10-06-2009 01:15 | |
Delphi - [решено] SQL-запрос на Delphi | FRZ | Программирование и базы данных | 2 | 16-04-2009 15:42 | |
sql запрос | Вебмастеру | 20 | 30-12-2006 22:31 | ||
SQL запрос | pauluss | Вебмастеру | 5 | 11-06-2004 09:14 | |
SQL-запрос | anridir | Программирование и базы данных | 2 | 23-09-2002 07:11 |
|