Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Lamer666 Member Откуда: Сообщений: 83 |
Добрый день. Хотел узнать мнение экспертов по следующему вопросу. Например есть база данных в MsSQL 2008-2012, со множеством связанных таблиц. То есть (Есть таблица товаров, таблица единиц измерений, таблица характеристик, таблица остатков, и т.д. и т.д. Для работы сотни менеджеров я хочу создать VIEW (представление) куда собираю сложным(ми) запросом(сами) нужные данные, где одна строка уже содержит все нужные менеджеру данные: товар, кол-во, остаток, ед.изм.) 1. Будет ли корректным решение: создать ПРЕДСТАВЛЕНИЕ (получаемое в результате сложного запроса) и давать работать выше указанным пользователям только с этим представлением? 2. Увеличит ли такое решение производительность (делать один SELECT из простой (заранее удобно собранной) VIEW, чем один, или может несколько СЛОЖНЫХ запросов из реальных таблиц)? 3. Можно ли редактировать данный VIEW в процессе работы? Вернее то что редактировать его можно, это я прочел на (http://msdn.microsoft.com) но насколько это будет замедлять работу пользователей в целом? Насколько это ПРАВИЛЬНО? VIEW при этом переписывается вновь, или редактируется, что происходит с другими пользователями они (теряют доступ в связи с удалением и пересозданием представления, или просто ожидают окончания блокировки)? Например нужно постоянно менять во VIEW остатки при заказе товара, все остальные данные практически без изменений. 4. Как быть при появлении нового товара, какие существуют варианты обновления VIEW новыми товарами (по таймеру, по событию, или еще как)? Спасибо большое всем, за ваше мнение. |
7 авг 14, 16:52 [16413043] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
1. права можно разграничить, если вам так нужно. 2. зависит от набора данных и оптимальности вашей структуры и покрытия индексов и тд и тп (тестируйте) 3. что-то не то вы видимо читали. вы каким клиентом пользуетесь? 4. тут вообще странная фраза. вы о чём? |
7 авг 14, 16:56 [16413083] Ответить | Цитировать Сообщить модератору |
Lamer666 Member Откуда: Сообщений: 83 |
Delphi+ADOConnection+ADOQuery
Если в исходный таблицах, на базе которых я создал VIEW, появятся новые строки данных, VIEW надо обновлять, или VIEW сам обновиться? |
||||
7 авг 14, 17:33 [16413372] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
если вы во View жёсткие условия отбора данных не будете делать (where c константами по полям), то всё будет ок, фильтруйте уже в своём клиентском приложении |
7 авг 14, 17:39 [16413404] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
обновляемый рекордсет я бы не советовал использовать , если у вас view на основе множества join |
7 авг 14, 17:40 [16413408] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
Представление - это просто скомпилированный запрос с возможностью администрирования. Никакими наборами данных (кроме индексов в некоторых случаях) представление не обладает. |
7 авг 14, 17:47 [16413446] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
Изучайте справку до понимания... |
7 авг 14, 17:48 [16413456] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
чего это вдруг "Представление - это скомпилированный запрос". это сохраненный в базе текст запроса, в виде объекта, + права на этот объект: Views and inline table-valued functions (inline TVFs) are two reusable types of table expressions; their definitions are stored as database objects. After they have been created, those objects are permanent parts of the database and are only removed from the database if they are explicitly dropped. when querying a view or an inline TVF, SQL Server expands the definition of the table expression and queries the underlying objects directly, as with derived tables and CTEs. Because a view is an object in the database, you can control access to the view with permissions just as you can with other objects that can be queried (these permissions include SELECT, INSERT, UPDATE, and DELETE permissions). For example, you can deny direct access to the underlying objects while granting access to the view. |
||
7 авг 14, 18:19 [16413588] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
o-o, то есть анализатор берет чистый текст представления, добавляет его в запрос, составляет план и компилирует и выполняет? |
7 авг 14, 18:31 [16413628] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Владислав Колосов, ну да, а что с этим не так? кстати, термин "компилирует" как раз и означает "составляет план". т.е. "объект компилируется" -- это не "текст парсится и в базе сохраняется", это то, что непосредственно перед выполнением происходит, а не в момент сохранения текста в базе. ну и "перекомпилируется" = "заново план строится" |
7 авг 14, 18:50 [16413700] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вот подробно: SQL Server builds query plans for these types of objects: Stored procedures. Scalar user-defined functions. Multi-step table-valued functions. Triggers. For other types of objects than the four listed above, SQL Server does not build query plans. Specifically, SQL Server does not create query plans for views and inline-table functions. Queries like: SELECT abc, def FROM myview SELECT a, b, c FROM mytablefunc(9) are no different from ad-hoc queries that access the tables directly. When compiling the query, SQL Server expands the view/function into the query, and the optimizer works with the expanded query text. |
||
8 авг 14, 01:17 [16414930] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Универсальные решения как правило очень тормозные. |
||
8 авг 14, 03:58 [16415001] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |