Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неверное предполагаемое количество строк  [new]
denacid
Member

Откуда:
Сообщений: 8
Добрый день.

В наличии таблица (_InfoRg1192) с количество строк 782950.
У таблице есть индекс по следующим полям:
T1._Fld1199
T1._Fld1193RRef
T1._Fld1194_TYPE
T1._Fld1194_RTRef
T1._Fld1194_RRRef

Выполняю простенький запрос:

SELECT
T1._Fld1199
FROM
_InfoRg1192 T1 WITH(NOLOCK)
WHERE
T1._Fld1199 = 0x01
AND T1._Fld1193RRef = @P4
AND T1._Fld1194_TYPE = @P5
AND T1._Fld1194_RTRef = @P6
AND T1._Fld1194_RRRef = @P7

В результате план выполнения пишет что предполагаемое количество строк = 142,874

Полная статистика по индексу:
---------------------------------------------------------------------------------------------------------------------------------
Name Updated Rows Rows Sampled Steps Density Average key length String Index Filter Expression Unfiltered Rows
_InfoRg1192_Test_1 ноя 16 2011 2:11PM 782950 782950 2 0 38 NO NULL 782950

All density Average Length Columns
0,5 1 _Fld1199
0,1666667 17 _Fld1199, _Fld1193RRef
0,1666667 18 _Fld1199, _Fld1193RRef, _Fld1194_TYPE
0,125 22 _Fld1199, _Fld1193RRef, _Fld1194_TYPE, _Fld1194_RTRef
0,0001824817 38 _Fld1199, _Fld1193RRef, _Fld1194_TYPE, _Fld1194_RTRef, _Fld1194_RRRef

RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS
0x00 0 777725 0 1
0x01 0 5225 0 1

--------------------------------------------------------------------------------------------------------------------------------

А теперь вопрос: почему при подсчете предполагаемого количества строк SQL берет 782950*0,0001824817, а не 5225*0,0001824817???

PS:
Microsoft SQL Server 2008 R2 Express SP1

Делал:
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
DBCC FREEPROCCACHE
Пересоздавал индекс.
16 ноя 11, 14:29    [11606213]     Ответить | Цитировать Сообщить модератору
 Re: Неверное предполагаемое количество строк  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
denacid
Добрый день.

А теперь вопрос: почему при подсчете предполагаемого количества строк SQL берет 782950*0,0001824817, а не 5225*0,0001824817???



А почему он должен взять 5225*0,0001824817?

782950 - это общее кол-во строк (записей) в таблице и множится на плотность для данного индекса.
16 ноя 11, 15:18    [11606738]     Ответить | Цитировать Сообщить модератору
 Re: Неверное предполагаемое количество строк  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
План выполнения покажите? Какой у Вас там индекс вообще используется...
16 ноя 11, 15:18    [11606744]     Ответить | Цитировать Сообщить модератору
 Re: Неверное предполагаемое количество строк  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
и обратите внимание что у Вас в статистике данные только по первому полю индекса, а сам индекс составной + в запросе используются параметры = вполне логично использовать общее количесво строк статистики
16 ноя 11, 15:22    [11606793]     Ответить | Цитировать Сообщить модератору
 Re: Неверное предполагаемое количество строк  [new]
denacid
Member

Откуда:
Сообщений: 8
Вот план

К сообщению приложен файл (1.sqlplan - 5Kb) cкачать
16 ноя 11, 15:26    [11606852]     Ответить | Цитировать Сообщить модератору
 Re: Неверное предполагаемое количество строк  [new]
denacid
Member

Откуда:
Сообщений: 8
Все равно непонятно, зачем ему все строки, если максимум что будет использовано это 5225
16 ноя 11, 15:30    [11606917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить