Как SQL-сервер определяет предполагаемое количество строк?

Я пытаюсь отладить довольно сложную хранимую процедуру, которая объединяет множество таблиц (10-11). Я'Я вижу, что для части дерева предполагаемое количество строк резко отличается от фактического количества строк - в худшем случае SQL-сервер оценивает, что будет возвращена 1 строка, когда в действительности будет возвращено 55 000 строк!

я пытаюсь понять, почему это так - вся моя статистика актуальна, и яобновил статистику с помощью FULLSCAN по нескольким таблицам. Я'Я не использую никаких пользовательских функций или табличных переменных. Насколько я вижу, SQL-сервер должен быть в состоянии точно оценить, сколько строк будет возвращено, но он продолжает выбирать план, в котором он выполняет десятки тысяч поисков RDI (когда он ожидает только 1 или 2).

Что я могу сделать, чтобы попытаться понять, почему расчетное количество строк так много?

ОБНОВИТЬ: Итак, глядя на план, который яВ частности, мы нашли один узел, который кажется подозрительным - это сканирование таблицы на столе с использованием следующего предиката:

status  5
AND [type] = 1
OR [type] = 2

Этот предикат возвращает всю таблицу (630 строк - сама таблица сканирует ее, но НЕ является источником плохой производительности), однако SQL-сервер оценивает число строк всего в 37. Затем SQL-сервер выполняет несколько вложенных циклов с этим на RDI поиск, просмотр индекса и поиск индекса. Может ли это быть источником моего массивного просчета? Как мне получить более разумное количество строк?

Ответы на вопрос(4)

Ваш ответ на вопрос