powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с большой вьюшкой
18 сообщений из 18, страница 1 из 1
Работа с большой вьюшкой
    #39722762
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В системе есть вьюшка джойном объединяющая кучу таблиц и фактически представляющая собой всю БД собранную воедино.
Народ привык делать на нее прямые запросы для отчетов, типа select * from vw_report where ....

Сама вьюха представляет собой базовую таблицу base на которую зацеплено огромное количество справочников. В чем собственно говоря проблема. Проблема в том что когда человек пишет запрос select * from vw_report where id=xxx где id фактически является основным полем базовой таблицы base в вьюхе vw_report то парсер сначала объединяет все таблицы в vw_report что долго и только потом берет строку с указанным id. При этом id это кластерный PK на базовой таблице base.
Отсюда вопрос, что можно сделать дабы парсер сначала производил бы поиск по id в таблице base, а уже потом делал портянки джойнов для vw_report, а не наоборот.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722765
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

авторпарсер сначала объединяет все таблицы в vw_report что долго и только потом берет строку с указанным id
Откуда такой вывод? И что кто этот "парсер"?
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722773
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю запроc select * from vw_report where id=xxx по плану вижу что идут сначала джойны таблиц, а уже потом выбор одной строки,
итого 7 секунд
а если делаю
select * from base
join....
... (тут полная копия всех джойнов из vw_report)
join ...
where base.id=xxx
то выполняется моментом и план показывает что сначала выбирается запись из base и все остальное уже цепляется на эту одну запись
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722774
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

Есть ли у вас план, мистер Фикс?
Есть ли у меня план? Есть ли у меня план? Да у меня целых три плана!
(с) Мистер Фикс
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722776
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиделаю запроc select * from vw_report where id=xxx по плану вижу что идут сначала джойны таблиц, а уже потом выбор одной строки,
итого 7 секунд
а если делаю
select * from base
join....
... (тут полная копия всех джойнов из vw_report)
join ...
where base.id=xxx
то выполняется моментом и план показывает что сначала выбирается запись из base и все остальное уже цепляется на эту одну запись
планы показывайте. Или FORCE ORDER
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722855
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиВ системе есть вьюшка джойном объединяющая кучу таблиц и фактически представляющая собой всю БД собранную воедино.
Народ привык делать на нее прямые запросы для отчетов, типа select * from vw_report where ....

Сама вьюха представляет собой базовую таблицу base на которую зацеплено огромное количество справочников. В чем собственно говоря проблема. Проблема в том что когда человек пишет запрос select * from vw_report where id=xxx где id фактически является основным полем базовой таблицы base в вьюхе vw_report то парсер сначала объединяет все таблицы в vw_report что долго и только потом берет строку с указанным id. При этом id это кластерный PK на базовой таблице base.
Отсюда вопрос, что можно сделать дабы парсер сначала производил бы поиск по id в таблице base, а уже потом делал портянки джойнов для vw_report, а не наоборот.
Если написано внутри view джойны в виде left hash join или inner hash join - то сервер будет сначала читать таблицу base и все таблицы справочников, а потом уже отбирать одну строку по id. Если внутри view такие же простые join, как и в запросе, написанном "вручную", то возникает подозрение, что условие where base.id=xxx для "ручного запроса" совсем не так выглядит внутри view, там может быть on base.id = sprav1.base_id where base.dop_column = yyy или что-нибудь типа where base.id = convert(varchar(3),xxx).

Поэтому без полного текста view какой смысл гадать на кофейной гуще?
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722872
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPЕсли написано внутри view джойны в виде left hash join или inner hash join - то сервер будет сначала читать таблицу base и все таблицы справочников, а потом уже отбирать одну строку по id.Как интересно. И у вас наверняка найдется и пример, и объяснения такого поведения?
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722879
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPЕсли написано внутри view джойны в виде left hash join или inner hash join - то сервер будет сначала читать таблицу base и все таблицы справочников, а потом уже отбирать одну строку по id. Если внутри view такие же простые join, как и в запросе, написанном "вручную", то возникает подозрение, что условие where base.id=xxx для "ручного запроса" совсем не так выглядит внутри view, там может быть on base.id = sprav1.base_id where base.dop_column = yyy или что-нибудь типа where base.id = convert(varchar(3),xxx).

Поэтому без полного текста view какой смысл гадать на кофейной гуще?Это вы пытаетсь сказать, что при наличии локальных хинтов predicate pushdown никогда работать не будет?
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722884
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичAndy_OLAPЕсли написано внутри view джойны в виде left hash join или inner hash join - то сервер будет сначала читать таблицу base и все таблицы справочников, а потом уже отбирать одну строку по id. Если внутри view такие же простые join, как и в запросе, написанном "вручную", то возникает подозрение, что условие where base.id=xxx для "ручного запроса" совсем не так выглядит внутри view, там может быть on base.id = sprav1.base_id where base.dop_column = yyy или что-нибудь типа where base.id = convert(varchar(3),xxx).

Поэтому без полного текста view какой смысл гадать на кофейной гуще?Это вы пытаетсь сказать, что при наличии локальных хинтов predicate pushdown никогда работать не будет?
Я пытаюсь автору темы донести, что если он написал select и join руками, а потом увидел похожие слова внутри view - это совсе не означает, что where xx.yy = zz означает одно и тоже.
И поэтому жду от него здесь полный текст view.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722887
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPЯ пытаюсь автору темы донести, что если он написал select и join руками, а потом увидел похожие слова внутри view - это совсе не означает, что where xx.yy = zz означает одно и тоже.Да нет. Вы написали очередную чушь, а теперь пытаетесь вывернуться.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722907
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постараюсь собрать пример, просто основная структура да и данные скажем так не совсем для публичного доступа.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39722934
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

План лучше покажите. Актуальный.
SentryOne Plan Explorer умеет анонимизировать планы.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723038
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиПостараюсь собрать пример, просто основная структура да и данные скажем так не совсем для публичного доступа.Если не можете показывать имена, то покажите вьюху, заменив названия таблиц

Ещё лучше показать план, но он большой, там сложнее менять имена.

PS А вообще невозможность "показывать" означает невозможность пользоваться интернетом при разработке. Тогда нужно формировать команду с очень-очень большим запасом.
Впрочем, на это вы повлиять не можете :-(
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723056
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиделаю запроc select * from vw_report where id=xxx по плану вижу что идут сначала джойны таблиц, а уже потом выбор одной строки

Правильно ли я понял, что если вы мышей на стрелки к джойну в актуальном плане наводите, то вам говорят, что актуальное количество строк = кардинальности всей таблицы для каждой таблицы джойна?
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723058
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

Сорри, для таблицы base вашего view запроса интересует количество строк к джойну, конечно же.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723069
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmПлан лучше покажите. Актуальный.
SentryOne Plan Explorer умеет анонимизировать планы.
+1

https://www.sentryone.com/plan-explorer
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723258
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребят спасибо за советы, отдельное спасибо за Plan Explorer
Я сейчас сначала попробую порыть сам с использованием Ваших советов и PE, ну а если уж неполучится то приду снова.
...
Рейтинг: 0 / 0
Работа с большой вьюшкой
    #39723831
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиделаю запроc select * from vw_report where id=xxx по плану вижу что идут сначала джойны таблиц, а уже потом выбор одной строки,
итого 7 секунд
а если делаю
select * from base
join....
... (тут полная копия всех джойнов из vw_report)
join ...
where base.id=xxx
то выполняется моментом и план показывает что сначала выбирается запись из base и все остальное уже цепляется на эту одну записьСделайте не так как вы написали, а возьмите целиком весь SELECT из вью, включая WHERE и все остальное. в этом случае план и скорость должны быть идентичными, а потом убирайте постепенно джойны/условия и поймете в чем затык.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с большой вьюшкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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