Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 306
Либо уже поздно и я туго соображаю, но в документации написано, что данный хинт токо для Indexed views.

Применил его к обычной вьюхе с кучей UNION ALL и объектами типа sys.objects и sys.foreign_keys внутри. И сработало однако!
Припоминаю однако, что уже такое видел где-то... С обычной вьюхой.
Ткните плз в документацию, а то я в недоумении
15 окт 19, 00:31    [21994210]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
msLex
Member

Откуда:
Сообщений: 7729
Glebanski
Либо уже поздно и я туго соображаю, но в документации написано, что данный хинт токо для Indexed views.

Применил его к обычной вьюхе с кучей UNION ALL и объектами типа sys.objects и sys.foreign_keys внутри. И сработало однако!
Припоминаю однако, что уже такое видел где-то... С обычной вьюхой.
Ткните плз в документацию, а то я в недоумении

Не индексированные вью не могу не "разворачиваться", это же просто текст, без данных.
15 окт 19, 00:45    [21994212]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 306
Поставьте вместо MyDB любую вашу базу

CREATE OR ALTER VIEW vTest765 as
		SELECT  'MyDB' as DatabaseName,p.Name as ReferencedTable , col2.name
		as ReferencedColumn,  t.Name  as dd,  fk.name as ff, 
			fk.delete_referential_action_desc, fk.update_referential_action_desc
			FROM MyDB.sys.foreign_keys fk
			INNER JOIN MyDB.sys.objects t ON fk.parent_object_id = t.object_id
			INNER JOIN MyDB.sys.objects p ON fk.referenced_object_id = p.object_id
			join MyDB.sys.foreign_key_columns fkc on fkc.parent_object_id = t.object_id 
			JOIN MyDB.sys.columns col2
				ON col2.column_id = referenced_column_id AND col2.object_id = p.object_id
		UNION ALL
		SELECT  'msdb',p.Name , col2.name ,  t.Name ,  fk.name, 
			fk.delete_referential_action_desc, fk.update_referential_action_desc
			FROM msdb.sys.foreign_keys fk
			INNER JOIN msdb.sys.objects t ON fk.parent_object_id = t.object_id
			INNER JOIN msdb.sys.objects p ON fk.referenced_object_id = p.object_id
			join msdb.sys.foreign_key_columns fkc on fkc.parent_object_id = t.object_id 
			JOIN msdb.sys.columns col2
				ON col2.column_id = referenced_column_id AND col2.object_id = p.object_id;

-- Далее
SELECT * FROM vTest765 WHERE DatabaseName = 'msdb';
SELECT * FROM vTest765 WHERE DatabaseName = 'msdb' OPTION (EXPAND VIEWS);


Главное отличие первого запроса от второго, что запрос с OPTION (EXPAND VIEWS) вовсе не лезет в MyDB, даже Constant Scan не делает.
15 окт 19, 13:18    [21994557]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
главное отличие двух запросов в том,
что первый параметризовался, а второй нет.
ну допишите еще и первому option(recompile).
и подивитесь, почему же он " вовсе не лезет в MyDB, даже Constant Scan не делает"
15 окт 19, 13:33    [21994596]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 306
Yasha123,

RECOMPILE сработал как положено. Но при чем тут EXPAND VIEWS по прежнему загадка
15 окт 19, 14:40    [21994678]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (EXPAND VIEWS) - только ли для Indexed views?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Glebanski
Yasha123,
при чем тут EXPAND VIEWS по прежнему загадка

он просто не дал параметризовать запрос.
и при известном значении константы при выборе плана
часть с "другой базой" была отсечена.
15 окт 19, 14:48    [21994681]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить