powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хранение Select запросов в базе
25 сообщений из 51, страница 2 из 3
хранение Select запросов в базе
    #38392396
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DozentГде-то вычитал вчера, что они тормозят...

Вью выполняется (по крайней мере до 5.1) полностью и
лишь потом выполняется where к ней.
В Оракле есть так называемый предикате-пуш, когда
условия фильтров Оракле засовывает во вью и
делает все быстро.

Похоже, вы немного пере-планируете заранее.
Начинайте строить аппликацию и походу
будете анализирувать и строить запросы.
После 3-4 запросов поймете надо лиделать универсальную динамику или
обойдетесь десятком конкретных запросов.

А то понастроите тут динамический Тадж-Махал
а потом понадобится лишь летний домик.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392431
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007VIEW — это не таблица, это некий аналог вложенного подзапроса, со всеми вытекающими следствиями (индексы, план выполнения, актуальность данных, блокировки и т.п.).К сожалению, далеко не со всеми, особенно в MySQL.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392440
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcDozentГде-то вычитал вчера, что они тормозят...

После 3-4 запросов поймете надо лиделать универсальную динамику или
обойдетесь десятком конкретных запросов.

А то понастроите тут динамический Тадж-Махал
а потом понадобится лишь летний домик.

ну возможны селекты примерно по 16 параметрам...
Для этого придётся много запросов делать, я не считаю это норм решением, мб лучше обрабатывать в самой процедуре о наличии параметров?
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392449
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007DozentГде-то вычитал вчера, что они тормозят...Тормозят неоптимизированные запросы, а не view.Не все так просто. View Processing Algorithms
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392502
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007пропущено...
Тормозят неоптимизированные запросы, а не view.Не все так просто. View Processing Algorithms Спасибо, как раз начал искать, где почитать:)

Однако вроде бы в приведенном в процедуре запросе будет задействован алгоритм MERGE, что не противоречит моему ответу...
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392534
garbushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Oracle все прекрасно решается с помощью динамического SQL - строится запрос который помещается в текстовую переменную а дальше ( OPEN ... FOR ... ; FETCH ... INTO ... ;) либо execute immediate - а mysql попробуйте посмотреть в сторону (PREPARE ... FROM ...; EXECUTE ...;)
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392553
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garbushkaстроится запросСтроится кем именно?
А так - динамические запросы и в MySQL есть.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392556
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Однако вроде бы в приведенном в процедуре запросе будет задействован алгоритм MERGE, что не противоречит моему ответу...Дело же не в конкретном запросе. Топикстартеру нужна система, пригодная для широкого диапазона случаев.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392608
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dozentjavajdbcпропущено...


После 3-4 запросов поймете надо лиделать универсальную динамику или
обойдетесь десятком конкретных запросов.

А то понастроите тут динамический Тадж-Махал
а потом понадобится лишь летний домик.

ну возможны селекты примерно по 16 параметрам...
Для этого придётся много запросов делать, я не считаю это норм решением, мб лучше обрабатывать в самой процедуре о наличии параметров?

тогда делайте динамически, как вам подсказали уже человек пять.
Разницы практически никакой делать динамику в процедуре
или на клиенте. Где вам удобнее там и делайте.

(в плане програмирования, клинетские языки удобнее,
в плане архитектуры с разными клентами --
на процедурах --- лучше)

Идея -- элементарная, уже прожеваняя выше -- сколько
пришло параметров, столько филтров (или жоинтов, как там
у вас по структуре получается)
и склеивайте динамически.
быстрее сделать чем обсуждать :-)

Успехов.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392613
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007Однако вроде бы в приведенном в процедуре запросе будет задействован алгоритм MERGE, что не противоречит моему ответу...Дело же не в конкретном запросе. Топикстартеру нужна система, пригодная для широкого диапазона случаев.Я понял, что это не совсем так. Есть «отчетный» запрос, к которому надо гибко прикручивать фильтрующие условия. Идеальная ситуация для view (точнее, для merge-view), я так думаю... И накручивать кучу процедур или кучу параметров в одной процедуре вместо естественного указания фильтров в WHERE просто излишне.

А иначе — объясните, нафига вообще придумали view
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392628
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007пропущено...
Тормозят неоптимизированные запросы, а не view.Не все так просто. View Processing Algorithms

Обана! а вот Алгоритм-Мерже это уже похоже на "предикате-пуш".
Отлично! надо будет внимательно потестировать.
Спасибо!
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392666
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcmiksoftпропущено...
Не все так просто. View Processing Algorithms Обана!Да ссылка-то баянистая. У нас по форуму уже много раз пробегала.javajdbc а вот Алгоритм-Мерже это уже похоже на "предикате-пуш".Не совсем так. MERGE, конечно, для "предикате-пуш" нужен. Но вовсе не гарантирует. Смутно припоминаю, что "предикате-пуш" появился (или был улучшен?) только в версии 5.6.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392682
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

может, и похоже, но работает только в простейших случаях/
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38392707
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, miksoft ,

даже если это и для простейших случаев --
уже большой шаг вперед.

У меня сейчас много агрегационных расчетов
и вью было бы очень удобным средством унификации --
но произовидутельноть сильно падает --
приходится почти повторять код в нескольких местах

Если Алгоритм-Мерге поможет избежать
полного пробега по в'ю -- хоть и в простых случаях,
мне это сильно поможет.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393001
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

да подняли не один вариант, но так ни к какому и не пришли...

авторТопикстартеру нужна система, пригодная для широкого диапазона случаев.

В точку..

Что я из этого всего вывел для себя,
1.Мало понял про View и их реализацию. Не понимаю помогут они мне или нет.
2.Понял что возможно придётся писать гиганскую процедуру которая будет проверять все параметры и пропускать только те которые удовлетворяют условию (как это напистаь впроцедуре пока тоже не знаю)
3. ЧТо скорее всего остановлюсь на селектах в коде, т.к. хорошего удобного метода для себя пока не увидил...
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393066
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dozentкак это напистаь впроцедуре пока тоже не знаюточно так же, как и на клиенте
только синтаксис, естественно, будет немного другой :)
Dozent
Код: sql
1.
WHERE worktab.id_w= id AND worktab.id_sotr=ids AND worktab.flag_end=1; или допустим просто clienttab.fio like'петя%'

ну и в чём затруднения? передавайте в процедуру строку типа "paramA;operA;valueA;;paramB;operB;valueB1;valueB2;;...", операции разрешите только "=", "between" и "like", проверяйте, чтобы все параметры присутствовали в исходных таблицах, и стройте запросы на здоровье... или вот тут автор
Код: sql
1.
Where id_cl= param1 and visit=param2 and ещё что то

может быть что-то похитрее простых сравнений?
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393102
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

не совсем. На клиенте можно сделать "автомат" по принципу if( параметр_задан ) { прикрутить блок where в собираемый селект }
что позволяет сделать "машинку" автопостроителя запросов по фильтрам, в т.ч. и с добавками произвольно сложных подзапросов к зависимым сущностям (left join-ы у автора в примере)... наиболее интересно (но дорого - через избыточный ООП) реализовано в Yii для PHP.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393152
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcDozentГде-то вычитал вчера, что они тормозят...

Вью выполняется (по крайней мере до 5.1) полностью и
лишь потом выполняется where к ней.


Это гон.

У view полно недостатков, связанных с производительностью, но именно в такой формулировке это утверждение
неверно.

Я бы НЕ советовал применять VIEW топикстартеру.
Не потому что view плохие, а просто потому, что процедуры лучше и удобнее.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393155
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dozent
ну возможны селекты примерно по 16 параметрам...
Для этого придётся много запросов делать, я не считаю это норм решением, мб лучше обрабатывать в самой процедуре о наличии параметров?

Это абсолютно нормальное решение.
Не бойся кол-ва запросов, это не проблема. Хоть 100 их будет (но их не будет 100).
Главное -- чтобы они были быстрыми, хорошо работали.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393160
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007
А иначе — объясните, нафига вообще придумали view


Да ни за чем. В общем -- абсолютно лишняя штука в РСУБД.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393168
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109tanglir,

не совсем. На клиенте можно сделать "автомат" по принципу if( параметр_задан ) { прикрутить блок where в собираемый селект }
что позволяет сделать "машинку" автопостроителя запросов по фильтрам, в т.ч. и с добавками произвольно сложных подзапросов к зависимым сущностям (left join-ы у автора в примере)... наиболее интересно (но дорого - через избыточный ООП) реализовано в Yii для PHP.

Кто мешает ровно то же самое сделать в хранимой процедуре?

У него будет два клиента БД -- Web-сервер и обычный desktop-клиент.
В таком случае придётся писать этот генератот запросов два раза -- один раз для desktop-клиента, другой раз --- в коде Web-сервера.
И потом это всё ещё отлаживать, исправлять и поддежривать.
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393239
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо за ответы, подсказки, рассуждения...
Т.к. о веб интерфейсе пока нет точной позиции , нужно будет или нет, буду делать на данный момент запросы в коде! Ведь для начала надо сделать хотя бы десктоповый клиент (да и время поджимает), а уже потом как согласятся на веб морду, буду решать как лучше сделать...


tanglirDozentкак это напистаь впроцедуре пока тоже не знаюточно так же, как и на клиенте
только синтаксис, естественно, будет немного другой :)
Dozent
Код: sql
1.
WHERE worktab.id_w= id AND worktab.id_sotr=ids AND worktab.flag_end=1; или допустим просто clienttab.fio like'петя%'

ну и в чём затруднения? передавайте в процедуру строку типа "paramA;operA;valueA;;paramB;operB;valueB1;valueB2;;...", операции разрешите только "=", "between" и "like", проверяйте, чтобы все параметры присутствовали в исходных таблицах, и стройте запросы на здоровье... или вот тут автор
Код: sql
1.
Where id_cl= param1 and visit=param2 and ещё что то

может быть что-то похитрее простых сравнений?

да может быть и in() да я примерно представляю, только как формировать строку условия не понятно?))
там сразу нажуно делать сравнение или написать WHERE @Строковая_переменая
А перед этим условиями составить эту строковую переменую?(не хватает опыта работы с хранимыми процедурами)
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393358
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Да, собственно ничего не мешает, акромя разбора параметров в ХП "на лету" и работу через динамический скуль (медленно и печально и то и другое, хотя для кого как, кому и улитка - спринтер ) . :)
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38393912
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivjavajdbcпропущено...


Вью выполняется (по крайней мере до 5.1) полностью и
лишь потом выполняется where к ней.


Это гон.

У view полно недостатков, связанных с производительностью, но именно в такой формулировке это утверждение
неверно.

...не шуми, контекст почитай, да...
...
Рейтинг: 0 / 0
хранение Select запросов в базе
    #38394182
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока в хранимках буду держать выборке по адишнику, всю инфу по клиенту, по заказу допустим, самые наиболее используемые, а потом как уже сказал буду думать как динамику прикрутить...


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
DELIMITER $$

USE `hairsalon`$$

DROP PROCEDURE IF EXISTS `work_select`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `work_select`(IN id INT(11))
BEGIN
SELECT 
worktab.id_w AS id_w,
worktab.id_cl AS id_cl,
worktab.id_sotr AS id_sotr,
worktab.id_srv AS id_srv,
worktab.id_hc_old AS id_hc_old,
worktab.id_hl_old AS id_hl_old,
worktab.id_hc AS id_hc,
worktab.id_hl AS id_hl,
worktab.visit AS visit,
worktab.id_item AS id_item,
worktab.flag_end AS flag_end,
worktab.suma AS suma,
clienttab.fio AS cfio,
haircolortab.name_color AS name_color,
hairlntab.name_ln AS name_ln,
haircolortab_old.name_color AS name_color_old,
hairlntab_old.name_ln AS name_ln_old,
itemstab.name_item AS name_item,
worktab.item_count AS item_count,
servicetab.name_srv AS name_srv,
sotrtab.fio AS sfio
FROM 
`hairsalon`.`work` worktab
LEFT OUTER JOIN  `hairsalon`.`client` clienttab           ON worktab.id_cl = clienttab.id_cl
LEFT OUTER JOIN  `hairsalon`.`haircolor` haircolortab     ON worktab.id_hc = haircolortab.id_hc
LEFT OUTER JOIN  `hairsalon`.`hairln` hairlntab           ON worktab.id_hl = hairlntab.id_hl
LEFT OUTER JOIN  `hairsalon`.`haircolor` haircolortab_old ON worktab.id_hc_old = haircolortab_old.id_hc
LEFT OUTER JOIN  `hairsalon`.`hairln` hairlntab_old       ON worktab.id_hl_old = hairlntab_old.id_hl
LEFT OUTER JOIN  `hairsalon`.`items` itemstab             ON worktab.id_item = itemstab.id_item
LEFT OUTER JOIN  `hairsalon`.`service` servicetab         ON worktab.id_srv = servicetab.id_srv
LEFT OUTER JOIN  `hairsalon`.`sotr` sotrtab               ON worktab.id_sotr = sotrtab.id_sotr
WHERE worktab.id_w= id;
    END$$

DELIMITER ;
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хранение Select запросов в базе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]