2016-10-31 3 views
2

Интересно, почему у меня есть фактическое количество строк, большее, чем предполагаемое количество строк?Фактическое количество строк, большее, чем предполагаемое количество строк

Таблица имеет кластерный первичный ключ определяется как:

CONSTRAINT [PK_AIRQUALITYTS] PRIMARY KEY CLUSTERED 
(
[FeatureID] ASC, 
[ParameterID] ASC, 
[MeasurementDateTime] DESC 
) 

enter image description here

Хотя я обновленные статистические данные по MeasurementDateTime колонке и перестроения индекса также.


Вопросы:

  • Почему фактическое количество строк больше, чем оценочное число строк? И есть ли у него какой-то удар производительности?

  • Должен ли я всегда пытаться получить фактическое количество строк, равное расчетному количеству строк? Или сколько изменений в подсчете строк в фактических и оцененных не должно нас беспокоить?

+1

какой скрипт вы использовали для обновления статистики? вы использовали WITH FULLSCAN? –

+0

ответ на ваш вопрос, одна из цифр - оценка - оценка основана на статистической выборке, статистика может устареть, но это не единственная причина, по которой может быть вычислена оценка - вы можете попробовать обновить статистику с ОБНОВЛЕНИЕМ СТАТИСТИКА

в качестве эксперимента. – Cato

ответ

0

Q1: Это зависит от того, сколько строк в общей сложности содержится в этой таблице. Так как SQL решает, какие операции следует использовать при построении плана выполнения. AFIK, оптимизатор запросов SQL решит использовать SCAN через операцию SEEK, если он оценит около 1/3 или более таблицы/индекса, необходимо будет найти [cardinality estimate question on SO]

Итак, короткий вопрос: это зависит по конкретному случаю.

Q2: Общее правило - попытаться оптимизировать только те запросы, которые, как вы знаете, имеют проблемы с производительностью.

+0

30% ... Я думаю, что это больше похоже на 2 - 3%. –

+0

Полезная информация в этой статье на sqlmag.com: [** Точка перехвата ** - Понимание того, как оптимизатор запросов SQL Server принимает решения] (http://sqlmag.com/database-administration/tipping-point) –

+0

@TT ., проверьте также этот: http://stackoverflow.com/questions/4579358/at-what-cardinality-does-sql-server-switch-to-an-index-scan-vs-seek –

0

две основные причины:

  1. Статистика неактуальна
  2. Плохой план кэшируется используется

Что касается 2, часто это связано с параметром нюхают проблемы, которые в свою очередь, из-за к определенным типам запросов.

Мы не знаем, какова ваша рабочая нагрузка - запрос или хранимая процедура.

Существует много способов для разработки, если вы используете устаревший план и много способов его вымыть, и все они включены в Google.

Смежные вопросы