powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему SQL Server игнорирует индекс в запросе
7 сообщений из 32, страница 2 из 2
Почему SQL Server игнорирует индекс в запросе
    #39692724
Max_11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nvvMax_11111,
1c обмен на sql? интересно.
"Правильный" - вообще не правильный. 1,6млрд циклов. Сколько каждый выполняется?

80000 изменений в РС - терпимо. Что если попробовать получить по каждому регистратору мин и макс периода и наложить условие
по периоду + регистратору? Теперь кластерный возможно задействуется, без NL
Да, 1С :) Выгружаем данных из основной базы в хранилище. Админы 1С сказали реализовать обмен по аналогии со стандартным, а мы и не против.
Насчёт периода - да, это решит проблему. С некоторыми таблицами так и сделали, т.к. там индекс без периода не работал (возможно тоже дело в статистике, но я тогда про планы запросов знал меньше). Но такое решение мне не нравится - много лишних соединений
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39692783
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max_11111GlebanskiМеня вероятно запинают, но все ж интересно.
Может быть, что SQL Server по какой-то причине стал полагать SORT слишком тяжеловесным? Изменится ли план, если внутри CTE заранее отсортировать данные? Ну с чем-то типа TOP 10000000
В меньшую сторону оценка может сдвинуться, а вот в большую - скорее всего нет. Как я понимаю:
- если оптимизатор оценивает объём выборки в 100 строк, а вы говорите TOP 1000 - то оптимизатор проигнорирует это значение, ведь 100 - это максимум, который он ожидает.
- Если оптимизатор даёт оценку в 1000 строк, а вы пишите TOP 100 - то оптимизатор с радостью изменит оценку на 100 строк.

? В 90% случаев при top оптимизатор будет использовать rowgoal, а оценка ожидания при этом считается как я тут описывал http://www.sql.ru/forum/1293108/strannaya-ocenka-kolichestva-strok?hl=, или я вас не понял.
Для табличных переменных можно использовать OPTION (RECOMPILE) и estimated будет верный.
Про SSIS не помню, так это или нет.
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39692789
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max_11111,

У вас таблица секционирована по _Period, а индекс нет. Если индекс секционировать и добавить _Period в условие соединения, возможно получите желаемое без дополнительных приседаний.
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39692896
Max_11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleksrov,
Спасибо, интересная статейка и ссылки в ней.
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39693166
nvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvv
Гость
Max_11111,
авторНасчёт периода - да, это решит проблему. С некоторыми таблицами так и сделали, т.к. там индекс без периода не работал (возможно тоже дело в статистике, но я тогда про планы запросов знал меньше). Но такое решение мне не нравится - много лишних соединений
Достаточно посмотреть структуру кластерного (период+рег) и некласт(рег), чтобы понять что это наверно единственный способ получить наиболее производительный результат.
Если это не так и вы уже все испробовали, то хоть расскажите, что в итоге получилось.

Еще подсказка. Период в регистре в 99% равен дате документа, но бывают архитектурные отклонения. Незначительные.
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39693169
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max_11111Статистику обновим, скорее всего на выходныхВряд ли поможет, если ошибается на JOIN. Как я уже сказал, у сервера проблемы с оценкой кардинальности по многоколоночным джойнам. Просто потому что он не отслеживает корреляцию значений между колонками в таблице. По сути у него есть две независимые гистограммы по ColumnA и ColumnB в одной таблице и тоже самое в другой. Отдельно по каждой колонке он посчитает кардинальность для джойна, а дальше идет усреднение для случая как если корреляции значений между колонками вообще никакой нет.

Max_11111База крутится на 2014 SQL.А compatibility level то какой?
Код: xml
1.
CardinalityEstimationModelVersion="70"

Ради интереса попробуйте применить новый Cardinality Estimator опцией OPTION (QUERYTRACEON 2312). Может он лучше справится.

Max_11111Критично. Запрос возвращает порядка 50000 строк, при этом оценочное количество на 4 порядка выше!То есть вы утверждаете что из первой таблицы этими 4-мя условиями выбирается 82 тысячи строк, а после джойна остается 50 тысяч? Т.е. таблица с ключами изменений содержит ключи которых нет в основной таблице, я вас правильно понял? Или может таки перестанете прокачивать наши телепатические скиллы и выложите актуальные планы?
...
Рейтинг: 0 / 0
Почему SQL Server игнорирует индекс в запросе
    #39693170
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKЕщё раз, ваши фантазии про промахивание оценки могут быть и верны, влияние на план 0 не фактПросветите неуча, на основании чего сервер строит план если не на оценках?
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему SQL Server игнорирует индекс в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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