Кэшируются ли представления в postgress?

Guderian
Дата: 23.01.2004 19:14:45
Есть довольно таки страшненькое представление (в качестве примера),
использующее вот такой вот запрос:

((((SELECT users_permission.uid, modules.id AS module FROM modules, users_permission WHERE ((modules.id = users_permission.module) AND (users_permission.permission <> '0000000000000000'::varbit))) UNION (SELECT users_groups_link.uid, modules.id AS module FROM modules, groups_permission, users_groups_link WHERE (((modules.id = groups_permission.module) AND (users_groups_link.gid = groups_permission.gid)) AND (groups_permission.permission <> '0000000000000000'::varbit))))) UNION (SELECT NULL::"unknown", modules.id AS module FROM modules WHERE (modules.permission <> '0000000000000000'::varbit)));

Смысл в принципе в том, чтобы используя записи о юзерских, групповых
разрешениях, а также разрешениях для всех на определенные модули php-приложения, нарисовать в хтмэльном GUI пункты меню - названия модулей с которыми пользователь может работать.

Вопрос мой однако довольно таки общего характера. Попробуйте оценить расходы на выполнение вышеприведенного запроса. Тяжко, не правда ли?
Так вот, интересует меня следующее. Не кэширует ли СУБД результаты запроса и смею ли я надеяться на то, что, если информация в таблицах, к коим обращается представление, не обновлялась, то и само представление не будет создаваться заново при обращении к нему?
Sad Spirit
Дата: 23.01.2004 20:59:27
Guderian
Вопрос мой однако довольно таки общего характера. Попробуйте оценить расходы на выполнение вышеприведенного запроса. Тяжко, не правда ли?


Ответ тоже общего характера: для оценки расходов есть команда EXPLAIN ANALYZE;

Guderian
Не кэширует ли СУБД результаты запроса и смею ли я надеяться на то, что, если информация в таблицах, к коим обращается представление, не обновлялась, то и само представление не будет создаваться заново при обращении к нему?


Не кэширует. Физически представление --- это несколько записей в системных таблицах. Подробности --- в документации, в разделе про RULE system.
Guderian
Дата: 26.01.2004 15:53:54
Благодарствую. План запроса однако я уже смотрел, и он надо сказать страшно меня напугал, поэтому собственно я и полез на форум.
Значит, не кэшируются... Хорошо, а SQL-код представлений хотя бы хранится в откомпиленном виде, как в мускуле, или каждый раз заново обрабатывается парсером?
Sad Spirit
Дата: 29.01.2004 11:52:42
1) с каких пор в "мускуле" есть представления?
2) я всё же рекомендую прочитать главу в документации про rules, там всё очень хорошо описано. в общем и целом --- каждый раз обрабатывается парсером.
3) если запросов на чтение намного больше, чем на запись, то можно организовать материализованное представление, посредством триггеров.
Guderian
Дата: 29.01.2004 18:30:36
sorry .... естественно в мускуле нет представлений я имел ввиду запросы вообще. А с материализованным представлением ... да, идея хорошая. Вот только не охота чтобы при каждом update/insert триггер заново создавал табличку. Ну да ниче, попробую похитрее как нибудь