powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / index hints on view
25 сообщений из 53, страница 2 из 3
index hints on view
    #39793277
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanTaPaKkapelan,

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

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

тестовый код в первом посте, попробуйте NOEXPAND.
Вам рекомендация, прежде чем советовать с уверенностью знатока - почитать доку или протестировать
ну так узнайте для чего нужен и применяется NOEXPAND
...
Рейтинг: 0 / 0
index hints on view
    #39793298
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKkapelanпропущено...


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

я Вас уже 4 раза в доку носом тыкал, изучайте пожалуйста самостоятельно.
По существу , есть рекомендации?
например как у Владислав Колосов
...
Рейтинг: 0 / 0
index hints on view
    #39793300
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Будете сраться -- придет лесник и всех разгонит.
...
Рейтинг: 0 / 0
index hints on view
    #39793302
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanПравильнее модифицировать проблемный запрос.Проблемный запрос можно можно модифицировать _не только_ хинтами.
...
Рейтинг: 0 / 0
index hints on view
    #39793303
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanTaPaKпропущено...

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

я Вас уже 4 раза в доку носом тыкал, изучайте пожалуйста самостоятельно.
По существу , есть рекомендации?
например как у Владислав Колосов
По существу: не любителю новых врат, ясно что пробросить какой-то индекс внутрь представления нельзя ввиду того что engine не знает к какому объекту применять ваш чудо хинт. Но вы можете и дальше фантазировать на предмет нового синтаксиса от Владислава, пробуйте добавить хинт "pogaluysta"
...
Рейтинг: 0 / 0
index hints on view
    #39793304
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовВот кабы синтаксис был бы with (index (table1.ix1)), но тогда это был бы дедушка, а не бабушка.А теперь представим, что table1 во всех представлениях упоминается более одного раза, а хинт приляпать надо в одном месте.
...
Рейтинг: 0 / 0
index hints on view
    #39793306
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичkapelanПравильнее модифицировать проблемный запрос.Проблемный запрос можно можно модифицировать _не только_ хинтами.
ткните носом пожалуйста - тестовый код в первом посте
Исходные данные:
на таблице в 100000000000 записей куча индексов
оптимизатор пользует индекс по своему усмотрению
Задача
заставить оптимизатор выбрать нужный индекс
...
Рейтинг: 0 / 0
index hints on view
    #39793312
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanГавриленко Сергей Алексеевичпропущено...
Проблемный запрос можно можно модифицировать _не только_ хинтами.
ткните носом пожалуйста - тестовый код в первом посте
Исходные данные:
на таблице в 100000000000 записей куча индексов
оптимизатор пользует индекс по своему усмотрению
Задача
заставить оптимизатор выбрать нужный индекс

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
    *
from   view1 a with ( forceseek )
where
    exists (
        SELECT 
            *
        FROM  view1 x with ( forceseek )
        WHERE 
            x.i=1
            and a.v = x.v
)
...
Рейтинг: 0 / 0
index hints on view
    #39793314
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanЗадача
заставить оптимизатор выбрать нужный индексЭто не задача, это придуманое вами решение проблемы "запрос тормозит, потому что оптимизатор выбирает не тот индекс". Задача, наверное, чтобы выбрать данные за разумное время, не?
...
Рейтинг: 0 / 0
index hints on view
    #39793315
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
к сожалению на первом шаге все-равно пользуется индех1.
Представим себе табицу employee , таблице пол и год рождения.
В запросе есть фильтр по полу и году рождения.
Оптимизатор выбирает индекс по полу
Задача выкинуть из мыслей этот индекс.
Собственно пока у меня одна идея - убить этот индекс. другого решения не вижу.
В этом случае прийдется копать весь остальной код на предмет кто-еще может пользовать индекс по полу.
...
Рейтинг: 0 / 0
index hints on view
    #39793319
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan Представим себе табицу employee , таблице пол и год рождения.
В запросе есть фильтр по полу и году рождения.
Оптимизатор выбирает индекс по полу

Да хоть так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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'



Или через промежуточную таблицу с последовательным применением сначала более селективного условия, а потом доп фильтрацией.
...
Рейтинг: 0 / 0
index hints on view
    #39793321
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
все равно лезет на индех1
...
Рейтинг: 0 / 0
index hints on view
    #39793322
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
промежуточную таблицу - да возможное решение.
но ... как-бы большой кровью достигается
...
Рейтинг: 0 / 0
index hints on view
    #39793341
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanпромежуточную таблицу - да возможное решение.
но ... как-бы большой кровью достигаетсяЧто делать, если заточили всю архитектуру на вьюхи...
...
Рейтинг: 0 / 0
index hints on view
    #39793347
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц
...
Рейтинг: 0 / 0
index hints on view
    #39793362
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanalexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц
Так не делал, но норм. Возьму "на карандашик".
По существу: а что мешает решить через WITH CTE (с минимизацией либо объёма первичной выборки либо затрат на первичную выборку)?
...
Рейтинг: 0 / 0
index hints on view
    #39793373
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanГавриленко Сергей Алексеевич,
все равно лезет на индех1У меня лезет в разные. Но вы скрытный, да.
...
Рейтинг: 0 / 0
index hints on view
    #39793379
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKkapelanShakill,
потомушта оптимизатор обязан выполнять хинты если они валидные.
вы наверное не знаете, но sql декларативный язык и тут никто никому не обязан

А шо, императивный бы достал i оттуда, хде ее нету?
...
Рейтинг: 0 / 0
index hints on view
    #39793417
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222TaPaKпропущено...

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

А шо, императивный бы достал i оттуда, хде ее нету?
Попробуй на таблице, удивишься
...
Рейтинг: 0 / 0
index hints on view
    #39793726
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_kapelanalexeyvg,
угу :(
когда-то встречал "программиста" который всякий раз создавал вью если в джойне более 3-х таблиц
Так не делал, но норм. Возьму "на карандашик".
По существу: а что мешает решить через WITH CTE (с минимизацией либо объёма первичной выборки либо затрат на первичную выборку)?
CTE не всегда работает так как думается.
Это оракл делает то что в доке написано, как видим MSSQL спокойно плюет на свою доку.
Оракл обязан выполнить то что в скобках а затем внешний запрос и всегда делает так ... как и всегда следует хинтам.
MSSQL оптимизатор не факт что выполнит СТЕ а потом пойдет дальше - там свои мозги, так-же с хинтами в СТЕ не все так просто.
временные таблицы работают гораздо понятнее - они тупо ограничивают оптимизатор одним запросом.
Гавриленко Сергей Алексеевич сразу предложил решение с ними.
...
Рейтинг: 0 / 0
index hints on view
    #39793784
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хинта не использовать в запросе индекс нет. Есть отключение индекса но это не то. Вариант только переписывать запрос заведомо передавая ему инфу через например временную таблицу всего того что вы считаете селективным условием. Алексей Гавриленко уже этот вариант предложил. Других вариантов нет.
...
Рейтинг: 0 / 0
index hints on view
    #39793859
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelanОракл обязан выполнить то что в скобках а затем внешний запрос и всегда делает такЕсли в скобках запрос, а снаружи условия, то он реально считает в память всё содержимое таблиц, а потом уже наложит условия? Это же жесть.
Значит, CTE в Оракле и в MSSQL принципиально разные.
kapelanMSSQL оптимизатор не факт что выполнит СТЕ а потом пойдет дальшеНе то, что "не факт", а он гарантированно так не сделает.
В MSSQL СТЕ - это просто альтернитивная форма записи подзапроса.
Оракл вообще какой то странный, игнорирует функциональную сущность SQL начисто :-)
...
Рейтинг: 0 / 0
index hints on view
    #39793873
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

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

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

3. Оракл вообще какой то странный, игнорирует функциональную сущность SQL начисто :-)
- нет он действует строго по директиве, а хуман сказал делать то что скобках в первую очередь значит так тому и быть.
...
Рейтинг: 0 / 0
index hints on view
    #39793964
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan,

по моим наблюдениям в Оракле SQL - это синтаксически сахар над процедурным PL ядром. Т.е. там SQL открыт и программист может в план встраивать всякую лабуду своего кода. Поэтому там эффективно работают курсоры. Они не эмулируются, но являются частью кода выполнения плана запроса. Но такая ненативность рождает другие проблемы, например, сложное описание типов или сложности в выводе датасетов клиенту из процедур.
...
Рейтинг: 0 / 0
index hints on view
    #39794017
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan1. Если в скобках запрос, а снаружи условия, то он реально считает в память всё содержимое таблиц, а потом уже наложит условия?
- нет не жесть это так должно быть. Пример: 6+(2*3)= 12; (6+2)*3 = 18;Нет-нет, результат-то должен быть одинаковый, это само собой.

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


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

Это обычно называют "императивный", а не "директивный".

Я не считаю это недостатком Оракла (может, он даже лучше как СУБД), просто надо понимать, что он совсем другой, это не просто другой язык, и другое администрирование, а совсем другие принципы. С Кобола или Джавы несравнимо легче перейти на Оракл, чем на MSSQL.
Я знал про всякие "триггеры на строку", массовое использование курсоров и т.д., но не представлял, что в CTE может быть такое.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / index hints on view
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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