Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 View на view..на view  [new]
RUST
Guest
1. Во всех ли случаях MSSQL сливает запросы из монстрового запроса с использованием вьюх?

2. Всегда ли оптимизатор правильно отрабатывает и не сканит таблицу "лишний раз"...чем при использовании подхода без "вложенных запросов - вьюх"?

Ссылка из доки приветствуется.
4 июн 03, 18:02    [221964]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
1. Куда MSSQLServer сливает запросы???

2. Что значит отрабатывает правильно? Планы выполнения надо смотреть.
5 июн 03, 09:18    [222334]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
rust
Guest
1. "Сливает" в "один" запрос....при разборе оптимизатором

2. Вопрос больше теоретический. Всегда ли оптимизатор догадывается ,что можно "один" раз сканить таблу. И какими параметрами это настраивается?
6 июн 03, 07:34    [223647]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
Glory
Member

Откуда:
Сообщений: 104760
1. Не во всех. Индексированные представления по-умолчанию не раскрываются.

2. Не всегда.
Но здесь не надо путать вашу точку зрения (ваши знания о таблице) на выполнение запроса с точкой зрения оптимизатора. Последний строит план выполнения в том числе и на основе наличия индексов/статистик, а также текущего состояния сервера.
6 июн 03, 12:03    [223984]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
rust
Guest
Получается при использовании MSSQL сервера, также как и Oracle кстати, не следует увлекаться "наложением" вью на вью...ибо оптимизатор не всегда сможет открыть скобки и не всегда точно отминимизирует количество ображений к исходным таблицам (напрямую либо через индексы) ?
6 июн 03, 13:01    [224085]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
rust
Guest
ТАК ОШИБАЮСЬ Я ИЛИ НЕТ?
6 июн 03, 15:06    [224303]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 rust
Смотря какие вью накладываешь.
Тебе это зачем? Просто понять надо вью использовать или нет?
6 июн 03, 17:10    [224539]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
Glory
Member

Откуда:
Сообщений: 104760
ТАК ОШИБАЮСЬ Я ИЛИ НЕТ?

Если это надо понимать как "Существует ли идеальный планировщик запросов ?", то мой ответ - нет, не существует.
Но можно сделать так, чтобы план конкретного запроса стал идеальным (ну или почти идеальным).
6 июн 03, 17:16    [224553]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 rust
Вот держи ссылку на доку (BOL)

View Resolution

...
When an SQL statement references a nonindexed view, the parser and query optimizer analyze the source of both the SQL statement and the view, and resolve them into a single execution plan. There is not one plan for the SQL statement and a separate plan for the view.

For example, consider the following view:

USE Northwind
GO
CREATE VIEW EmployeeName AS
SELECT EmployeeID, LastName, FirstName
FROM Northwind.dbo.Employees
GO

Given this view, both of these SQL statements perform the same operations on the base tables and produce the same results:

/* SELECT referencing the EmployeeName view. */
SELECT LastName AS EmployeeLastName,
OrderID, OrderDate
FROM Northwind.dbo.Orders AS Ord
JOIN Northwind.dbo.EmployeeName as EmpN
ON (Ord.EmployeeID = EmpN.EmployeeID)
WHERE OrderDate > '31 May, 1996'

/* SELECT referencing the Employees table directly. */
SELECT LastName AS EmployeeLastName,
OrderID, OrderDate
FROM Northwind.dbo.Orders AS Ord
JOIN Northwind.dbo.Employees as Emp
ON (Ord.EmployeeID = Emp.EmployeeID)
WHERE OrderDate > '31 May, 1996'

The SQL Query Analyzer showplan feature shows that the relational engine builds the same execution plan for both of these SELECT statements.
6 июн 03, 17:17    [224554]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
rust
Guest
2KonstN
Это только для "тривиальных" случаев...

2Glory
Куда уж до "идеальности"

>>Но можно сделать так, чтобы план конкретного запроса стал идеальным (ну >>и почти идеальным).

1. Хитроумными хинтами
2. Переписыванием скриптов...с минимизацией использования внутренних view..
Мораль: Навьючивание вьюх - запутывавает оптимизатор.
6 июн 03, 17:28    [224571]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
RUST
Guest
....запутывает оптимизатор...а значит в общем случае...он выбирает "иделальный" план выполения...ведь так?
6 июн 03, 17:33    [224576]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
Glory
Member

Откуда:
Сообщений: 104760
2. Переписыванием скриптов...с минимизацией использования внутренних view..
Или разбиением запроса на несколтько с использованием временных таблиц для промежуточных результатов.

запутывает оптимизатор...а значит в общем случае...он выбирает "иделальный" план выполения...ведь так?

Ну да - запутать можно кого угодно
А чему вы собственно клоните, никак не пойму. К тому что не надо использовать много таблиц в запросе ? Или к тому почему разработчикам приходится таки это делать ?
6 июн 03, 18:24    [224679]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
rust
Guest
Клоню к тому что:

Конечно для разработчика использовать режим "режим вью на вью" удобнее...Но что хорошо для разработчика....не всегда хорошо для оптимизатора...и поэтому....в большинстве случаев для сложных запросов... от использования вью следует отказаваться в пользу построения этого запроса "чисто на исходных таблицах......"
И от сообщества требуется ТОЛЬКО поддержать эту мысль....
9 июн 03, 13:00    [225608]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Но что хорошо для разработчика....не всегда хорошо для оптимизатора...и поэтому....в большинстве случаев для сложных запросов... от использования вью следует отказаваться в пользу построения этого запроса "чисто на исходных таблицах......"

А вот это надо смотреть в каждом конкретном случаи. Glory тебе уже сказал, что любой запрос можно вылизать.

И от сообщества требуется ТОЛЬКО поддержать эту мысль....

Харош филосовствовать. Уже пора чего-нибудь написать, хошь на вью, хошь на базовых таблицах. :-)
9 июн 03, 13:17    [225639]     Ответить | Цитировать Сообщить модератору
 Re: View на view..на view  [new]
Glory
Member

Откуда:
Сообщений: 104760
Мысль ОТКАЗАТЬСЯ от представлений в корне неправильная. Отказываясь от чего-то вы ограничиваете прежде всего себя.
Правильная мысль - ВЫБРАТЬ в каждом конкретном случае наиболее оптимальное решение.
9 июн 03, 14:59    [225837]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить