Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / index hints on view / 25 сообщений из 53, страница 1 из 3
28.03.2019, 17:15
    #39793156
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Есть view.
view не индексировано
На таблицах есть куча индексов.
Попытка заставить использовать нужный индех ни к чему не приводит - оптимайзер все-равно пользует тот который ему нравится.
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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
...
Рейтинг: 0 / 0
28.03.2019, 17:33
    #39793184
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Извини, дарагой. но оптимизатор умнее тебя.

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

Код: sql
1.
2.
SELECT v FROM  view1 WITH (index (t1_index2))
WHERE i=1
...
Рейтинг: 0 / 0
28.03.2019, 17:34
    #39793188
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelan, почему вы ищете по i, а при этом считаете что нужный индекс по v?
...
Рейтинг: 0 / 0
28.03.2019, 17:41
    #39793194
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
aleks222,
не извиню дарагой.
Реальная задача на много сложнее.
В реальной системе оптимизатор не всегда прав. И в этом случае его нужно заставить идти правильныйм путем.
Приведенный код доказывает что индексы не работают.
ВОПРОС
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью?
...
Рейтинг: 0 / 0
28.03.2019, 17:43
    #39793196
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanaleks222,
не извиню дарагой.
Реальная задача на много сложнее.
В реальной системе оптимизатор не всегда прав. И в этом случае его нужно заставить идти правильныйм путем.
Приведенный код доказывает что индексы не работают.
ВОПРОС
Возможно ли вообще заставить опптимизатор использовать индех на таблице через вью?

Приведенный говнокод доказывает только квалификацию программизда ниже плинтуса.
...
Рейтинг: 0 / 0
28.03.2019, 17:44
    #39793198
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Shakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
...
Рейтинг: 0 / 0
28.03.2019, 17:50
    #39793203
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanShakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
вы наверное не знаете, но sql декларативный язык и тут никто никому не обязан
...
Рейтинг: 0 / 0
28.03.2019, 17:51
    #39793207
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanShakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
ну так и пишите хинт внутри вью, там где имя таблицы
...
Рейтинг: 0 / 0
28.03.2019, 17:53
    #39793210
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
TaPaKkapelanShakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
вы наверное не знаете, но 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."

По существу идеи есть?
...
Рейтинг: 0 / 0
28.03.2019, 17:54
    #39793216
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanShakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.

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

Код: sql
1.
2.
3.
4.
5.
create table t1 (f1 int)
create table t2 (f1 int)

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



Сиквел, найди ix1.
...
Рейтинг: 0 / 0
28.03.2019, 17:56
    #39793217
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanTaPaKпропущено...

вы наверное не знаете, но 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."

По существу идеи есть?
по существу: вам в другой язык
...
Рейтинг: 0 / 0
28.03.2019, 17:57
    #39793222
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Вот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.
...
Рейтинг: 0 / 0
28.03.2019, 17:57
    #39793223
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Shakill,
вью пользуется сотнями процедур, у каждой своя специфика. Обычно оптимизатор работает правильно.
В одном запросе оптимизатор пользует индекс с очень плохой кардиналити.
Совсем не имеет смысла добавлять хинты во вью так как упадет сотня процедур.
Правильнее модифицировать проблемный запрос.
...
Рейтинг: 0 / 0
28.03.2019, 17:58
    #39793225
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
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
...
Рейтинг: 0 / 0
28.03.2019, 18:01
    #39793228
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Владислав КолосовВот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.

идея хорошая но так не работает
exception: Incorrect syntax near '.'.
...
Рейтинг: 0 / 0
28.03.2019, 18:05
    #39793231
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelan,

не работает, такого нет синтаксиса. Придётся представления править, если хотите. На самом деле Вы получаете с "плохим" индексом наиболее дешевый план, поэтому он и выбирается. Попробуйте пересчитать статистики с фулл сканом, может полегчает.
...
Рейтинг: 0 / 0
28.03.2019, 18:12
    #39793236
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Владислав Колосовkapelan,

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

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


но получаем ошибку 8723, поскольку в запросе о такой таблице или алиасе ничего неизвестно
...
Рейтинг: 0 / 0
28.03.2019, 18:32
    #39793251
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
Владислав Колосовkapelan,

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

не факт что пересборка статистики поможет, да и нельзя ее часто делать. Таблицы многомиллионные (более 10 нулей строк)
Сегодня оптимизатор решил так, завтра по другому.
Тут другая задача: наплевать на оптимизатор и сделать так как хочет хуман.
За сим и вопрошаю о помощи
...
Рейтинг: 0 / 0
28.03.2019, 18:36
    #39793253
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanВладислав Колосовkapelan,

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

не факт что пересборка статистики поможет, да и нельзя ее часто делать. Таблицы многомиллионные (более 10 нулей строк)
Сегодня оптимизатор решил так, завтра по другому.
Тут другая задача: наплевать на оптимизатор и сделать так как хочет хуман.
За сим и вопрошаю о помощи
Сильно сомневаюсь, что вы считаете более правильно
...
Рейтинг: 0 / 0
28.03.2019, 18:46
    #39793259
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
TaPaK,
Правильным я считаю делать так как написано в доке: а в доке прописано что хинты должны выполнятся оптимизатором.
Также я в курсе что индексные хинты никогда не работали на вью.
Но почему-то в последней версии они не бросают ехсепшина, отсюда вывод:
- что-то пофиксили и они должны работать коректно
но как показал тест - "в лоб" не работают.
За сим и данный топик: если кто сумел победить эту проблему, хотелось бы знаь как?
...
Рейтинг: 0 / 0
28.03.2019, 18:48
    #39793261
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017
...
Рейтинг: 0 / 0
28.03.2019, 18:50
    #39793262
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
TaPaKkapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
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
в этом собственно и смысл хинтов
...
Рейтинг: 0 / 0
28.03.2019, 18:51
    #39793263
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelan,

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

прекрасно работают при наличии NOEXPAND
...
Рейтинг: 0 / 0
28.03.2019, 18:52
    #39793265
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
kapelanTaPaKkapelan,
где написано ваше мифическое "что хинты должны выполнятся оптимизатором."
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
в этом собственно и смысл хинтов
любитель любоваться на новые врата? должны?
...
Рейтинг: 0 / 0
28.03.2019, 18:59
    #39793273
kapelan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index hints on view
TaPaKkapelan,

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

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

тестовый код в первом посте, попробуйте NOEXPAND.
Вам рекомендация, прежде чем советовать с уверенностью знатока - почитать доку или протестировать
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / index hints on view / 25 сообщений из 53, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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