powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / Деда, а ты пользуешь хранимки и триггеры в MySQL?
25 сообщений из 58, страница 1 из 3
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664528
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
Собственно сабж.

А то я тут хочу на основе триггеров БД один модуль на продажу для одной CMS написать. И думаю, может на триггерах всё построить. В Оракле в свое время многое на них строилось. Но это не Оракел.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664537
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  22.12.2020, 20:05
Собственно сабж.

А то я тут хочу на основе триггеров БД один модуль на продажу для одной CMS написать. И думаю, может на триггерах всё построить. В Оракле в свое время многое на них строилось. Но это не Оракел.
бизнес-логика на основе триггеров ?
да тебя сжечь сразу нахуй, медленно на свечках
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664538
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  22.12.2020, 20:11
Конякула  22.12.2020, 20:05
Собственно сабж.

А то я тут хочу на основе триггеров БД один модуль на продажу для одной CMS написать. И думаю, может на триггерах всё построить. В Оракле в свое время многое на них строилось. Но это не Оракел.
бизнес-логика на основе триггеров ?
да тебя сжечь сразу нахуй, медленно на свечках
Не. Там не бизнеслогика. В том-то и дело. Там модуль ускорения CMS.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664606
Фотография Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Хранимки да.
Триггеры нет.

Хранимки тоже использую по минимуму. Например чтобы собрать все ответы на ответы на ответы для исходног опоста
Код: 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.
45.
46.
CREATE PROCEDURE V1_DEEP_COLLECT_REPLIES(IN P_OID INTEGER)

DETERMINISTIC
SQL SECURITY INVOKER
COMMENT ''
PROC:
BEGIN
   DECLARE AFFECTED_CNT INTEGER;

   DELETE FROM TMP_CHILDREN;
   INSERT INTO TMP_CHILDREN (ID) VALUES (P_OID);

   CREATE TEMPORARY TABLE IF NOT EXISTS TMP_DEL_ITEMS2(ID INTEGER);
   CREATE TEMPORARY TABLE IF NOT EXISTS TMP_DEL_ITEMS3(ID INTEGER);

   DELETE FROM TMP_DEL_ITEMS2;
   INSERT INTO TMP_DEL_ITEMS2 (ID)
   SELECT ID FROM TMP_CHILDREN;

   DELETE FROM TMP_DEL_ITEMS3;
   INSERT INTO TMP_DEL_ITEMS3 (ID)
   SELECT ID FROM TMP_CHILDREN;

   SET @AFFECTED_CNT = 0;

   REPEAT

     INSERT INTO TMP_CHILDREN (ID)
     SELECT REPLY_POST_ID FROM V1_POST_HIERARCHY
     WHERE PARENT_POST_ID IN (SELECT ID FROM TMP_DEL_ITEMS2)
     AND REPLY_POST_ID NOT IN (SELECT ID FROM TMP_DEL_ITEMS3);

     SET @AFFECTED_CNT = ROW_COUNT();

     DELETE FROM TMP_DEL_ITEMS2;
     INSERT INTO TMP_DEL_ITEMS2 (ID)
     SELECT ID FROM TMP_CHILDREN;

     DELETE FROM TMP_DEL_ITEMS3;
     INSERT INTO TMP_DEL_ITEMS3 (ID)
     SELECT ID FROM TMP_CHILDREN;

   UNTIL @AFFECTED_CNT = 0
   END REPEAT;

END;
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664619
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  22.12.2020, 20:13
defecator  22.12.2020, 20:11
Конякула  22.12.2020, 20:05
...
бизнес-логика на основе триггеров ?
да тебя сжечь сразу нахуй, медленно на свечках
Не. Там не бизнеслогика. В том-то и дело. Там модуль ускорения CMS.
никаких триггеров
вся логика должна быть в хранимках

просто заруби это себе на носу навсегда
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Изменено: 22.12.2020, 21:01 - defecator
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664687
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  22.12.2020, 21:00
Конякула  22.12.2020, 20:13
defecator  22.12.2020, 20:11
...
Не. Там не бизнеслогика. В том-то и дело. Там модуль ускорения CMS.
никаких триггеров
вся логика должна быть в хранимках

просто заруби это себе на носу навсегда
Дефыч, ты вроде спец по говну, а не по базам? Или ты спец по говнобазам тоже? Ну так вот тебе к расмышлению немного информации:
Есть некая CMS, хорошая, удобная. Но, сцуко, разработчики лет 20 назад когда начинали её делать начитались теории про нормализацию БД и так её нормализировали, что данные там реально не дублируются. Но, если в этой базе много данных, то она так тормозит, что хочется плакать. Чтобы она перестала тормозить надо её немного денормализовать. А может и много. Просто взять и переделать таблички и сделать их шустрее в готовой CMS как ты наверное понимаешь не получится. Она опирается именно на эту структуру БД и по другому работать не умеет. Потому у меня возникла идея рядом с имеющейся структурой сделать свою, денормализованную и чтобы не ковыряться в бизнеслогике и не катомизировать весь стандартный код CMS проще повесить на стандартные таблички триггера, которые будут добалять, обновлять и удалять данные из моих кастомных табличек. А сверх моих кстомных табличек сделать одну единственную кастомную функцию и использовать её совместно со стандартными функциями выбора при выборе данных.

Может я ошибаюсь, но по-моему труггеры тут в самый раз.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664721
Фотография Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Триггеры как бы удобны они ни были, обычно в серьезных проектах не используют и я слышал много рекомендаций - ни в коем случае их не использовать. С ними блокировки намного больше и дольше как правило, чем без них.

На одном крупном проекте на MySQL у нашего американского партнера пришлось даже уйти от внешних ключей - также по соображением блокировок.

Когда я тоже ушел от внешних ключей на форуме, количество дедлоков скоратилось до единичных редких случаев.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664729
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  22.12.2020, 21:55
defecator  22.12.2020, 21:00
Конякула  22.12.2020, 20:13
...
никаких триггеров
вся логика должна быть в хранимках

просто заруби это себе на носу навсегда
Дефыч, ты вроде спец по говну, а не по базам? Или ты спец по говнобазам тоже? Ну так вот тебе к расмышлению немного информации:
Есть некая CMS, хорошая, удобная. Но, сцуко, разработчики лет 20 назад когда начинали её делать начитались теории про нормализацию БД и так её нормализировали, что данные там реально не дублируются.
охуенные люди, просто молодцы ! аплодирую стоя - сделали, как надо !
Конякула  22.12.2020, 21:55
Но, если в этой базе много данных, то она так тормозит, что хочется плакать.
скорее всего, кто-то забыл про индексы и злоупотреблял left join
Конякула  22.12.2020, 21:55
Чтобы она перестала тормозить надо её немного денормализовать.
а вот теперь выпей йаду
денормализация допускается только в логировании данных, а ты просто лошара, которая ничего в БД не смыслит
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664808
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
Программизд 02  22.12.2020, 22:23
Триггеры как бы удобны они ни были, обычно в серьезных проектах не используют и я слышал много рекомендаций - ни в коем случае их не использовать. С ними блокировки намного больше и дольше как правило, чем без них.

На одном крупном проекте на MySQL у нашего американского партнера пришлось даже уйти от внешних ключей - также по соображением блокировок.

Когда я тоже ушел от внешних ключей на форуме, количество дедлоков скоратилось до единичных редких случаев.
Я выше описал как хочу использовать триггеры. Как думаешь, стоит? Или всё же запариться и на уровне php всё это реализовать?
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664816
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  22.12.2020, 22:29
скорее всего, кто-то забыл про индексы и злоупотреблял left join
С индексами там всё хорошо. А вот с джойнами как раз плохо. Потому что там ну условно в CMS есть внутренний тип данных с 10-тью полями. Чтобы его весь выбрать это надо взять и сджойнить 2 таблички сами на себя 10 раз. А теперь представь себе страницу сайта на которой 5 слайдеров по 10 слайдов в каждом в которых вот этот самый тип данных выбирается. 50 объектов, в каждом надо 2 таблики 10 раз на себя сджойнить. Страница откликается через 2 секунды. Это много.
defecator  22.12.2020, 22:29
а вот теперь выпей йаду
денормализация допускается только в логировании данных, а ты просто лошара, которая ничего в БД не смыслит
Доведение до высших форм нормальзации вообще не допускается. Как раз по тому, что они очень ресурсовёмки при выборках данных. Так что пойди хлебни говна.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664829
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  22.12.2020, 23:14
defecator  22.12.2020, 22:29
скорее всего, кто-то забыл про индексы и злоупотреблял left join
С индексами там всё хорошо. А вот с джойнами как раз плохо. Потому что там ну условно в CMS есть внутренний тип данных с 10-тью полями. Чтобы его весь выбрать это надо взять и сджойнить 2 таблички сами на себя 10 раз. А теперь представь себе страницу сайта на которой 5 слайдеров по 10 слайдов в каждом в которых вот этот самый тип данных выбирается. 50 объектов, в каждом надо 2 таблики 10 раз на себя сджойнить. Страница откликается через 2 секунды. Это много.
если такая хуйня - джойнить саму на себя десятки раз - происходит, то там нет никакой нормализации, говно из говна
подобное присутствует во всякой аналитике, но обычно решается средствами самой СУБД, достаточно, чтобы программер это всё знал

И таки да, аналитика в любой базе совсем не быстрая
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664839
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  22.12.2020, 23:22
Конякула  22.12.2020, 23:14
defecator  22.12.2020, 22:29
...
С индексами там всё хорошо. А вот с джойнами как раз плохо. Потому что там ну условно в CMS есть внутренний тип данных с 10-тью полями. Чтобы его весь выбрать это надо взять и сджойнить 2 таблички сами на себя 10 раз. А теперь представь себе страницу сайта на которой 5 слайдеров по 10 слайдов в каждом в которых вот этот самый тип данных выбирается. 50 объектов, в каждом надо 2 таблики 10 раз на себя сджойнить. Страница откликается через 2 секунды. Это много.
если такая хуйня - джойнить саму на себя десятки раз - происходит, то там нет никакой нормализации, говно из говна
подобное присутствует во всякой аналитике, но обычно решается средствами самой СУБД, достаточно, чтобы программер это всё знал

И таки да, аналитика в любой базе совсем не быстрая
Ну вот видишь. Потому и надо немного денормализовать. Чтобы вместо десяти джойнов был запрос из одной таблички, который нужные ID-шники возвращает, а потом уже в основной запрос с двумя табличками и единственным джойном этот массив загнать. Будет в 100 раз быстрее.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664861
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  22.12.2020, 23:28
defecator  22.12.2020, 23:22
Конякула  22.12.2020, 23:14
...
если такая хуйня - джойнить саму на себя десятки раз - происходит, то там нет никакой нормализации, говно из говна
подобное присутствует во всякой аналитике, но обычно решается средствами самой СУБД, достаточно, чтобы программер это всё знал

И таки да, аналитика в любой базе совсем не быстрая
Ну вот видишь. Потому и надо немного денормализовать. Чтобы вместо десяти джойнов был запрос из одной таблички, который нужные ID-шники возвращает, а потом уже в основной запрос с двумя табличками и единственным джойном этот массив загнать. Будет в 100 раз быстрее.
аналитика лежит в другом уровне
ты этого не понимаешь
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664903
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  22.12.2020, 23:43
Конякула  22.12.2020, 23:28
defecator  22.12.2020, 23:22
...
Ну вот видишь. Потому и надо немного денормализовать. Чтобы вместо десяти джойнов был запрос из одной таблички, который нужные ID-шники возвращает, а потом уже в основной запрос с двумя табличками и единственным джойном этот массив загнать. Будет в 100 раз быстрее.
аналитика лежит в другом уровне
ты этого не понимаешь
У меня это не аналитика. Это просто ускорение основных запросов на сайте.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664956
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Конякула  23.12.2020, 00:07
defecator  22.12.2020, 23:43
Конякула  22.12.2020, 23:28
...
аналитика лежит в другом уровне
ты этого не понимаешь
У меня это не аналитика. Это просто ускорение основных запросов на сайте.
получается, что говно в базе и архитектуре
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2664990
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
defecator  23.12.2020, 00:48
Конякула  23.12.2020, 00:07
defecator  22.12.2020, 23:43
...
У меня это не аналитика. Это просто ускорение основных запросов на сайте.
получается, что говно в базе и архитектуре
Тут я спорить не готов. Сама система удобная в использовании, красивая, удобная в разработке. Но в плане БД... уж какая есть. Я могу только прикрутить что-то сверху, чтобы ускорить сайты, которые я разрабатываю.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665069
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конякула  22.12.2020, 21:55
defecator  22.12.2020, 21:00
Конякула  22.12.2020, 20:13
...
никаких триггеров
вся логика должна быть в хранимках

просто заруби это себе на носу навсегда
Дефыч, ты вроде спец по говну, а не по базам? Или ты спец по говнобазам тоже? Ну так вот тебе к расмышлению немного информации:
Есть некая CMS, хорошая, удобная. Но, сцуко, разработчики лет 20 назад когда начинали её делать начитались теории про нормализацию БД и так её нормализировали, что данные там реально не дублируются. Но, если в этой базе много данных, то она так тормозит, что хочется плакать. Чтобы она перестала тормозить надо её немного денормализовать. А может и много. Просто взять и переделать таблички и сделать их шустрее в готовой CMS как ты наверное понимаешь не получится. Она опирается именно на эту структуру БД и по другому работать не умеет. Потому у меня возникла идея рядом с имеющейся структурой сделать свою, денормализованную и чтобы не ковыряться в бизнеслогике и не катомизировать весь стандартный код CMS проще повесить на стандартные таблички триггера, которые будут добалять, обновлять и удалять данные из моих кастомных табличек. А сверх моих кстомных табличек сделать одну единственную кастомную функцию и использовать её совместно со стандартными функциями выбора при выборе данных.

Может я ошибаюсь, но по-моему труггеры тут в самый раз.
Плохая идея с триггера ми
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665084
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
триггеры надо использовать очень аккуратно.

например в справочниках что бы гарантированно не ёбнули какие-то нужные записи.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665161
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
eNose  23.12.2020, 07:47
триггеры надо использовать очень аккуратно.

например в справочниках что бы гарантированно не ёбнули какие-то нужные записи.
Так для этого констрейнты есть
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665209
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
defecator  23.12.2020, 09:14
eNose  23.12.2020, 07:47
триггеры надо использовать очень аккуратно.

например в справочниках что бы гарантированно не ёбнули какие-то нужные записи.
Так для этого констрейнты есть
при чем тут это?

я про (например) пол "пидарас", который должен быть в справочнике, но пока что пидорасов в сотрудниках типа нет.
так вот пол удалять надо запретить.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665212
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
eNose  23.12.2020, 10:10
defecator  23.12.2020, 09:14
eNose  23.12.2020, 07:47
...
Так для этого констрейнты есть
при чем тут это?

я про (например) пол "пидарас", который должен быть в справочнике, но пока что пидорасов в сотрудниках типа нет.
так вот пол удалять надо запретить.
Правами это не разруливается?
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665220
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
defecator  23.12.2020, 10:11
eNose  23.12.2020, 10:10
defecator  23.12.2020, 09:14
...
при чем тут это?

я про (например) пол "пидарас", который должен быть в справочнике, но пока что пидорасов в сотрудниках типа нет.
так вот пол удалять надо запретить.
Правами это не разруливается?
конкретно это - нет.
должен же быть "оператор справочника", у которого должны быть права модификации справочника.
и тут как раз поможет триггер.

вообще легкие триггеры в общем то полезны, проблема как всегда в том, что говнокодеры пытаются заибашить триггер с вычислениями на 100500 строк.
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665222
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
ну и автоинкремент в оракле удобно ж триггерами делать
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2665224
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
Программизд 02  22.12.2020, 22:23
Триггеры как бы удобны они ни были, обычно в серьезных проектах не используют и я слышал много рекомендаций - ни в коем случае их не использовать.
чушь, ровно как и с GOTO

просто надо сначала отпиздить говнокодера, а потом пусть пишет код
...
Рейтинг: 0 / 0
Деда, а ты пользуешь хранимки и триггеры в MySQL?
    #2667828
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
Вот запрос который генерируется CMS на одном из блоков страницы:
Код: 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.
SELECT DISTINCT SQL_CALC_FOUND_ROWS
    h.id AS id, h.rel AS pid
FROM
    cms3_hierarchy h,
    cms3_permissions p,
    cms3_objects o
        LEFT JOIN
    cms3_object_content oc_509_lj ON oc_509_lj.obj_id = o.id
        AND oc_509_lj.field_id = '509'
        LEFT JOIN
    cms3_object_content oc_516_lj ON oc_516_lj.obj_id = o.id
        AND oc_516_lj.field_id = '516'
        LEFT JOIN
    cms3_object_content oc_517_lj ON oc_517_lj.obj_id = o.id
        AND oc_517_lj.field_id = '517'
WHERE
    h.type_id IN (56)
        AND ((oc_509_lj.int_val = '1'
        OR oc_516_lj.int_val = '1'
        OR oc_517_lj.int_val = '1'))
        AND h.lang_id = '1'
        AND h.is_deleted = '0'
        AND h.is_active = '1'
        AND (p.rel_id = h.id AND p.level & 1
        AND p.owner_id IN (579))
        AND h.id IN (33 , 28, 24, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 104,  22,  121,  61,  37, 34, 58, 35, 41, 56)
        AND h.obj_id = o.id
ORDER BY h.ord ASC
LIMIT 0 , 10
Как видите тут 3 лефтджойна. Их может быть больше. Они подключают много раз одну и ту же таблицу. В таблице этой может быть много данных и запрос из-за этого тормозит.

Вот структура таблицы cms3_hierarchy:
Код: 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.
CREATE TABLE `cms3_hierarchy` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `rel` int(10) unsigned NOT NULL,
  `type_id` int(10) unsigned NOT NULL,
  `lang_id` int(10) unsigned NOT NULL,
  `domain_id` int(10) unsigned NOT NULL,
  `obj_id` int(10) unsigned NOT NULL,
  `ord` int(11) DEFAULT '0',
  `tpl_id` int(10) unsigned DEFAULT NULL,
  `alt_name` varchar(128) DEFAULT NULL,
  `is_active` tinyint(1) DEFAULT NULL,
  `is_deleted` tinyint(1) DEFAULT NULL,
  `is_visible` tinyint(1) DEFAULT NULL,
  `updatetime` int(11) DEFAULT NULL,
  `is_default` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `types rels_FK` (`type_id`),
  KEY `Prefix from lang_id_FK` (`lang_id`),
  KEY `Domain from domain_id relation_FK` (`domain_id`),
  KEY `hierarchy to plain object image_FK` (`obj_id`),
  KEY `Getting template data_FK` (`tpl_id`),
  KEY `is_default` (`is_default`),
  KEY `alt_name` (`alt_name`),
  KEY `is_deleted` (`is_deleted`),
  KEY `is_active` (`is_active`),
  KEY `ord` (`ord`),
  KEY `rel` (`rel`),
  KEY `updatetime` (`updatetime`),
  KEY `is_visible` (`is_visible`),
  CONSTRAINT `FK_Domain from domain_id relation` FOREIGN KEY (`domain_id`) REFERENCES `cms3_domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_Getting template data` FOREIGN KEY (`tpl_id`) REFERENCES `cms3_templates` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_Prefix from lang_id` FOREIGN KEY (`lang_id`) REFERENCES `cms3_langs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_hierarchy to plain object image` FOREIGN KEY (`obj_id`) REFERENCES `cms3_objects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_types rels` FOREIGN KEY (`type_id`) REFERENCES `cms3_hierarchy_types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=utf8;
cms3_objects
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE `cms3_objects` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `guid` varchar(64) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `is_locked` tinyint(1) DEFAULT NULL,
  `type_id` int(10) unsigned DEFAULT NULL,
  `owner_id` int(10) unsigned DEFAULT NULL,
  `ord` int(10) unsigned DEFAULT '0',
  `updatetime` int(11) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Object to type relation_FK` (`type_id`),
  KEY `name` (`name`),
  KEY `owner_id` (`owner_id`),
  KEY `is_locked` (`is_locked`),
  KEY `ord` (`ord`),
  KEY `guid` (`guid`),
  KEY `updatetime` (`updatetime`),
  CONSTRAINT `FK_Object to type relation` FOREIGN KEY (`type_id`) REFERENCES `cms3_object_types` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=805 DEFAULT CHARSET=utf8;
cms3_object_content
Код: 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.
CREATE TABLE `cms3_object_content` (
  `obj_id` int(10) unsigned DEFAULT NULL,
  `field_id` int(10) unsigned DEFAULT NULL,
  `int_val` bigint(20) DEFAULT NULL,
  `varchar_val` varchar(255) DEFAULT NULL,
  `text_val` mediumtext,
  `rel_val` int(10) unsigned DEFAULT NULL,
  `tree_val` int(10) unsigned DEFAULT NULL,
  `float_val` double DEFAULT NULL,
  KEY `Content to object relation_FK` (`obj_id`),
  KEY `Contents field id relation_FK` (`field_id`),
  KEY `Relation value reference_FK` (`rel_val`),
  KEY `content2tree_FK` (`tree_val`),
  KEY `int_val` (`int_val`),
  KEY `varchar_val` (`varchar_val`),
  KEY `float_val` (`float_val`),
  KEY `text_val` (`text_val`(8)),
  KEY `K_Complex_FieldIdAndRelVal` (`field_id`,`rel_val`),
  KEY `K_Complex_FieldIdAndTreeVal` (`field_id`,`tree_val`),
  KEY `K_Complex_ObjIdAndFieldId` (`obj_id`,`field_id`),
  CONSTRAINT `FK_Content to object relation` FOREIGN KEY (`obj_id`) REFERENCES `cms3_objects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_Contents field id relation` FOREIGN KEY (`field_id`) REFERENCES `cms3_object_fields` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_Relation value reference` FOREIGN KEY (`rel_val`) REFERENCES `cms3_objects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_content2tree` FOREIGN KEY (`tree_val`) REFERENCES `cms3_hierarchy` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Как тут можно переписать запрос, чтобы он не тормозил?

У меня идея создать таблицу с контентом в которой все поля конкретного внутреннего типа в одной записи и упростить запрос до.
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT DISTINCT SQL_CALC_FOUND_ROWS
    h.id AS id, h.rel AS pid
FROM
    cms3_hierarchy h,
    cms3_permissions p,
    (SELECT
        id
    FROM
        kss_type_56 kt56in
    WHERE
        kt56in.fld_509 = '1'
            AND kt56in.fld_516 = '1'
            AND kt56in.fld_517 = '1') kt56
WHERE
    h.type_id IN (56) AND h.lang_id = '1'
        AND h.is_deleted = '0'
        AND h.is_active = '1'
        AND (p.rel_id = h.id AND p.level & 1
        AND p.owner_id IN (579))
        AND h.id = kt56.id
ORDER BY h.ord ASC
LIMIT 0 , 10
Подозреваю, что это будет выполняться значительно быстрее. Вот как раз актуальность таблички kss_type_56 думаю поддерживать триггерами.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Вопросы по IT / Деда, а ты пользуешь хранимки и триггеры в MySQL?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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