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

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

пропущено...

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


тестовый код в первом посте, попробуйте NOEXPAND.
Вам рекомендация, прежде чем советовать с уверенностью знатока - почитать доку или протестировать

ну так узнайте для чего нужен и применяется NOEXPAND
28 мар 19, 19:00    [21846537]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

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


тестовый код в первом посте, попробуйте NOEXPAND.
Вам рекомендация, прежде чем советовать с уверенностью знатока - почитать доку или протестировать

ну так узнайте для чего нужен и применяется NOEXPAND


я Вас уже 4 раза в доку носом тыкал, изучайте пожалуйста самостоятельно.
По существу , есть рекомендации?
например как у Владислав Колосов
28 мар 19, 19:43    [21846569]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Модератор: Будете сраться -- придет лесник и всех разгонит.
28 мар 19, 19:48    [21846571]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
kapelan
Правильнее модифицировать проблемный запрос.
Проблемный запрос можно можно модифицировать _не только_ хинтами.
28 мар 19, 19:53    [21846574]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

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

ну так узнайте для чего нужен и применяется NOEXPAND


я Вас уже 4 раза в доку носом тыкал, изучайте пожалуйста самостоятельно.
По существу , есть рекомендации?
например как у Владислав Колосов

По существу: не любителю новых врат, ясно что пробросить какой-то индекс внутрь представления нельзя ввиду того что engine не знает к какому объекту применять ваш чудо хинт. Но вы можете и дальше фантазировать на предмет нового синтаксиса от Владислава, пробуйте добавить хинт "pogaluysta"
28 мар 19, 19:54    [21846575]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Владислав Колосов
Вот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.
А теперь представим, что table1 во всех представлениях упоминается более одного раза, а хинт приляпать надо в одном месте.
28 мар 19, 19:57    [21846576]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 719
Гавриленко Сергей Алексеевич
kapelan
Правильнее модифицировать проблемный запрос.
Проблемный запрос можно можно модифицировать _не только_ хинтами.

ткните носом пожалуйста - тестовый код в первом посте
Исходные данные:
на таблице в 100000000000 записей куча индексов
оптимизатор пользует индекс по своему усмотрению
Задача
заставить оптимизатор выбрать нужный индекс
28 мар 19, 19:59    [21846579]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
kapelan
Гавриленко Сергей Алексеевич
пропущено...
Проблемный запрос можно можно модифицировать _не только_ хинтами.

ткните носом пожалуйста - тестовый код в первом посте
Исходные данные:
на таблице в 100000000000 записей куча индексов
оптимизатор пользует индекс по своему усмотрению
Задача
заставить оптимизатор выбрать нужный индекс


По какому хотите индексу:

select
    *
from   view1 a with ( forceseek )
where
    exists (
        SELECT 
            *
        FROM  view1 x with ( forceseek )
        WHERE 
            x.i=1
            and a.v = x.v
)
28 мар 19, 20:11    [21846586]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
kapelan
Задача
заставить оптимизатор выбрать нужный индекс
Это не задача, это придуманое вами решение проблемы "запрос тормозит, потому что оптимизатор выбирает не тот индекс". Задача, наверное, чтобы выбрать данные за разумное время, не?

Сообщение было отредактировано: 28 мар 19, 20:17
28 мар 19, 20:16    [21846590]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 719
Гавриленко Сергей Алексеевич,
к сожалению на первом шаге все-равно пользуется индех1.
Представим себе табицу employee , таблице пол и год рождения.
В запросе есть фильтр по полу и году рождения.
Оптимизатор выбирает индекс по полу
Задача выкинуть из мыслей этот индекс.
Собственно пока у меня одна идея - убить этот индекс. другого решения не вижу.
В этом случае прийдется копать весь остальной код на предмет кто-еще может пользовать индекс по полу.
28 мар 19, 20:22    [21846592]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
kapelan
Представим себе табицу employee , таблице пол и год рождения.
В запросе есть фильтр по полу и году рождения.
Оптимизатор выбирает индекс по полу


Да хоть так:

select
    *
from   view1 a with ( forceseek )
where
    a.i = 3
    and a.v between 'sys' and 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

select
    *
from   view1 a with ( forceseek )
where
    a.i = 3
    and reverse(reverse(a.v)) between 'sys' and 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


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

Откуда: хутор БольшойБугор
Сообщений: 719
Гавриленко Сергей Алексеевич,
все равно лезет на индех1
28 мар 19, 20:39    [21846600]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 719
Гавриленко Сергей Алексеевич,
промежуточную таблицу - да возможное решение.
но ... как-бы большой кровью достигается
28 мар 19, 20:42    [21846601]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30782
kapelan
промежуточную таблицу - да возможное решение.
но ... как-бы большой кровью достигается
Что делать, если заточили всю архитектуру на вьюхи...
28 мар 19, 21:32    [21846631]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 719
alexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц
28 мар 19, 22:01    [21846650]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8644
kapelan
alexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц

Так не делал, но норм. Возьму "на карандашик".
По существу: а что мешает решить через WITH CTE (с минимизацией либо объёма первичной выборки либо затрат на первичную выборку)?
28 мар 19, 23:20    [21846676]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
kapelan
Гавриленко Сергей Алексеевич,
все равно лезет на индех1
У меня лезет в разные. Но вы скрытный, да.
29 мар 19, 01:27    [21846699]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
aleks222
Member

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

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


А шо, императивный бы достал i оттуда, хде ее нету?
29 мар 19, 05:39    [21846718]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
TaPaK
Member

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

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


А шо, императивный бы достал i оттуда, хде ее нету?

Попробуй на таблице, удивишься
29 мар 19, 09:38    [21846789]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 719
SIMPLicity_
kapelan
alexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц

Так не делал, но норм. Возьму "на карандашик".
По существу: а что мешает решить через WITH CTE (с минимизацией либо объёма первичной выборки либо затрат на первичную выборку)?

CTE не всегда работает так как думается.
Это оракл делает то что в доке написано, как видим MSSQL спокойно плюет на свою доку.
Оракл обязан выполнить то что в скобках а затем внешний запрос и всегда делает так ... как и всегда следует хинтам.
MSSQL оптимизатор не факт что выполнит СТЕ а потом пойдет дальше - там свои мозги, так-же с хинтами в СТЕ не все так просто.
временные таблицы работают гораздо понятнее - они тупо ограничивают оптимизатор одним запросом.
Гавриленко Сергей Алексеевич сразу предложил решение с ними.
29 мар 19, 15:59    [21847280]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
МуМу
Member

Откуда:
Сообщений: 1120
Хинта не использовать в запросе индекс нет. Есть отключение индекса но это не то. Вариант только переписывать запрос заведомо передавая ему инфу через например временную таблицу всего того что вы считаете селективным условием. Алексей Гавриленко уже этот вариант предложил. Других вариантов нет.
29 мар 19, 17:06    [21847383]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30782
kapelan
Оракл обязан выполнить то что в скобках а затем внешний запрос и всегда делает так
Если в скобках запрос, а снаружи условия, то он реально считает в память всё содержимое таблиц, а потом уже наложит условия? Это же жесть.
Значит, CTE в Оракле и в MSSQL принципиально разные.
kapelan
MSSQL оптимизатор не факт что выполнит СТЕ а потом пойдет дальше
Не то, что "не факт", а он гарантированно так не сделает.
В MSSQL СТЕ - это просто альтернитивная форма записи подзапроса.
Оракл вообще какой то странный, игнорирует функциональную сущность SQL начисто :-)
29 мар 19, 18:02    [21847471]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
kapelan
Member

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

1. Если в скобках запрос, а снаружи условия, то он реально считает в память всё содержимое таблиц, а потом уже наложит условия?
- нет не жесть это так должно быть. Пример: 6+(2*3)= 12; (6+2)*3 = 18;
В зависимости какой результат мне нужен - там скобки и ставлю. у оптимизатора выбора быть не должно - так как хуман приказал.
Не нравится запросы в скобках? - не пишите так

2. Значит, CTE в Оракле и в MSSQL принципиально разные.
- разные как видим
В MSSQL СТЕ - это просто альтернитивная форма записи подзапроса
- true

3. Оракл вообще какой то странный, игнорирует функциональную сущность SQL начисто :-)
- нет он действует строго по директиве, а хуман сказал делать то что скобках в первую очередь значит так тому и быть.
29 мар 19, 18:23    [21847494]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
Владислав Колосов
Member

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

по моим наблюдениям в Оракле SQL - это синтаксически сахар над процедурным PL ядром. Т.е. там SQL открыт и программист может в план встраивать всякую лабуду своего кода. Поэтому там эффективно работают курсоры. Они не эмулируются, но являются частью кода выполнения плана запроса. Но такая ненативность рождает другие проблемы, например, сложное описание типов или сложности в выводе датасетов клиенту из процедур.
29 мар 19, 23:08    [21847635]     Ответить | Цитировать Сообщить модератору
 Re: index hints on view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30782
kapelan
1. Если в скобках запрос, а снаружи условия, то он реально считает в память всё содержимое таблиц, а потом уже наложит условия?
- нет не жесть это так должно быть. Пример: 6+(2*3)= 12; (6+2)*3 = 18;
Нет-нет, результат-то должен быть одинаковый, это само собой.

Но вот в следующем примере результат для сиквела и оракла будет одинаковый, но в оракле, получается, так писать нельзя, нужно явно задать способ получения результата, а не "формулу":
with C
(
    select * from myTable
)
select id from C where id = 123

kapelan
3. Оракл вообще какой то странный, игнорирует функциональную сущность SQL начисто :-)
- нет он действует строго по директиве, а хуман сказал делать то что скобках в первую очередь значит так тому и быть.
- Он не функциональный!
- Нет, да!
Картинка с другого сайта.
Это обычно называют "императивный", а не "директивный".

Я не считаю это недостатком Оракла (может, он даже лучше как СУБД), просто надо понимать, что он совсем другой, это не просто другой язык, и другое администрирование, а совсем другие принципы. С Кобола или Джавы несравнимо легче перейти на Оракл, чем на MSSQL.
Я знал про всякие "триггеры на строку", массовое использование курсоров и т.д., но не представлял, что в CTE может быть такое.
30 мар 19, 10:40    [21847731]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить