Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
Есть view.
view не индексировано
На таблицах есть куча индексов.
Попытка заставить использовать нужный индех ни к чему не приводит - оптимайзер все-равно пользует тот который ему нравится.
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью ?
drop table t1
go
CREATE TABLE t1 (i INT, v VARCHAR(4000)) 
go
CREATE INDEX t1_index1 ON t1(i)
go
CREATE INDEX t1_index2 ON t1(v)
go
CREATE VIEW view1 AS
SELECT * 
FROM t1
go
INSERT INTO t1
select OBJECT_ID,name 
from sys.objects

SELECT *
FROM  view1 WITH (index (t1_index2))
WHERE i=1
28 мар 19, 17:15    [21846386]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
aleks222
Member

Откуда:
Сообщений: 985
Извини, дарагой. но оптимизатор умнее тебя.

Как он из t1_index2 достанет i?

SELECT v FROM  view1 WITH (index (t1_index2))
WHERE i=1
28 мар 19, 17:33    [21846423]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
kapelan, почему вы ищете по i, а при этом считаете что нужный индекс по v?
28 мар 19, 17:34    [21846427]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
aleks222,
не извиню дарагой.
Реальная задача на много сложнее.
В реальной системе оптимизатор не всегда прав. И в этом случае его нужно заставить идти правильныйм путем.
Приведенный код доказывает что индексы не работают.
ВОПРОС
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью?
28 мар 19, 17:41    [21846435]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
aleks222
Member

Откуда:
Сообщений: 985
kapelan
aleks222,
не извиню дарагой.
Реальная задача на много сложнее.
В реальной системе оптимизатор не всегда прав. И в этом случае его нужно заставить идти правильныйм путем.
Приведенный код доказывает что индексы не работают.
ВОПРОС
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью?


Приведенный говнокод доказывает только квалификацию программизда ниже плинтуса.
28 мар 19, 17:43    [21846437]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
28 мар 19, 17:44    [21846439]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.

вы наверное не знаете, но sql декларативный язык и тут никто никому не обязан
28 мар 19, 17:50    [21846444]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
kapelan
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.

ну так и пишите хинт внутри вью, там где имя таблицы
28 мар 19, 17:51    [21846449]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
TaPaK
kapelan
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.

вы наверное не знаете, но sql декларативный язык и тут никто никому не обязан

Вам сюда: https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-2017
"Query hints specify that the indicated hints should be used throughout the query."

По существу идеи есть?
28 мар 19, 17:53    [21846452]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
kapelan
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.


С чего Вы решили, что хинт валидный?

create table t1 (f1 int)
create table t2 (f1 int)

create index ix1 on t1 (f1)
create index ix1 on t2 (f1)


Сиквел, найди ix1.
28 мар 19, 17:54    [21846458]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan
TaPaK
пропущено...

вы наверное не знаете, но sql декларативный язык и тут никто никому не обязан

Вам сюда: https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-2017
"Query hints specify that the indicated hints should be used throughout the query."

По существу идеи есть?

по существу: вам в другой язык
28 мар 19, 17:56    [21846459]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
Вот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.
28 мар 19, 17:57    [21846464]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
Shakill,
вью пользуется сотнями процедур, у каждой своя специфика. Обычно оптимизатор работает правильно.
В одном запросе оптимизатор пользует индекс с очень плохой кардиналити.
Совсем не имеет смысла добавлять хинты во вью так как упадет сотня процедур.
Правильнее модифицировать проблемный запрос.
28 мар 19, 17:57    [21846465]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
kapelan
Вам сюда: https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-2017
"Query hints specify that the indicated hints should be used throughout the query."
По существу идеи есть?

по существу вы привели описание поведения query hint, а у вас table hint
28 мар 19, 17:58    [21846467]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
Владислав Колосов
Вот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.


идея хорошая но так не работает
exception: Incorrect syntax near '.'.
28 мар 19, 18:01    [21846471]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
kapelan,

не работает, такого нет синтаксиса. Придётся представления править, если хотите. На самом деле Вы получаете с "плохим" индексом наиболее дешевый план, поэтому он и выбирается. Попробуйте пересчитать статистики с фулл сканом, может полегчает.
28 мар 19, 18:05    [21846474]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Владислав Колосов
kapelan,

не работает, такого нет синтаксиса. Придётся представления править, если хотите.


вообще есть такой синтаксис :)
SELECT *
FROM  view1 
WHERE i=1
option ( TABLE HINT (t1, index (t1_index2)))

но получаем ошибку 8723, поскольку в запросе о такой таблице или алиасе ничего неизвестно
28 мар 19, 18:12    [21846481]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
Владислав Колосов
kapelan,

не работает, такого нет синтаксиса. Придётся представления править, если хотите. На самом деле Вы получаете с "плохим" индексом наиболее дешевый план, поэтому он и выбирается. Попробуйте пересчитать статистики с фулл сканом, может полегчает.


не факт что пересборка статистики поможет, да и нельзя ее часто делать. Таблицы многомиллионные (более 10 нулей строк)
Сегодня оптимизатор решил так, завтра по другому.
Тут другая задача: наплевать на оптимизатор и сделать так как хочет хуман.
За сим и вопрошаю о помощи
28 мар 19, 18:32    [21846505]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan
Владислав Колосов
kapelan,

не работает, такого нет синтаксиса. Придётся представления править, если хотите. На самом деле Вы получаете с "плохим" индексом наиболее дешевый план, поэтому он и выбирается. Попробуйте пересчитать статистики с фулл сканом, может полегчает.


не факт что пересборка статистики поможет, да и нельзя ее часто делать. Таблицы многомиллионные (более 10 нулей строк)
Сегодня оптимизатор решил так, завтра по другому.
Тут другая задача: наплевать на оптимизатор и сделать так как хочет хуман.
За сим и вопрошаю о помощи

Сильно сомневаюсь, что вы считаете более правильно
28 мар 19, 18:36    [21846507]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
TaPaK,
Правильным я считаю делать так как написано в доке: а в доке прописано что хинты должны выполнятся оптимизатором.
Также я в курсе что индексные хинты никогда не работали на вью.
Но почему-то в последней версии они не бросают ехсепшина, отсюда вывод:
- что-то пофиксили и они должны работать коректно
но как показал тест - "в лоб" не работают.
За сим и данный топик: если кто сумел победить эту проблему, хотелось бы знаь как?
28 мар 19, 18:46    [21846517]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017
28 мар 19, 18:48    [21846519]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
TaPaK
kapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017

в первой строке: Table hints override the default behavior of the query optimizer
в этом собственно и смысл хинтов
28 мар 19, 18:50    [21846520]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan,

автор
Также я в курсе что индексные хинты никогда не работали на вью.

прекрасно работают при наличии NOEXPAND
28 мар 19, 18:51    [21846521]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
kapelan
TaPaK
kapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017

в первой строке: Table hints override the default behavior of the query optimizer
в этом собственно и смысл хинтов

любитель любоваться на новые врата? должны?
28 мар 19, 18:52    [21846524]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
TaPaK
kapelan,

автор
Также я в курсе что индексные хинты никогда не работали на вью.

прекрасно работают при наличии NOEXPAND


тестовый код в первом посте, попробуйте NOEXPAND.
Вам рекомендация, прежде чем советовать с уверенностью знатока - почитать доку или протестировать
28 мар 19, 18:59    [21846533]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить