Merle wrote:Где я в своих рассуждениях ошибся?
Коротко - нигде. Дело в том, что sys.fn_indexinfo возвращает количество leaf pages. Так что это баг в этой функции. Она должна либо возвращать полное количество страниц (тогда бы Вы и увидели разницу), либо колонка должна называться leaf_pages, а не просто pages. Кстати, спасибо за вопрос - Вы первый, кто это заметил. Во всяком случае я не нашёл, чтобы этот баг уже был зафайлен. Так что завтра "обрадую" теперешнего владельца этого кода (3 года назад это был частично мой код - но это точно не мой баг ).
А вот sys.sysindexes действительно показывает больше информации. dpages - это leaf pages, а used = dpages + internal pages. Откуда internal pages = used - dpages. Разница небольшая потому, что, во-первых у Вас varchar (50), который на самом деле занимает ровно столько, сколько символов в NewID(). Замените его на fixed length char (800) и сразу увидите другие результаты. Во-вторых, fanout внутренней страницы индекса не бывает меньше 8-9, то есть в самом худшем случае, overhead на внутренние страницы не может быть больше, чем примерно 12-13% от общего объёма данных. Т.е. не стоит расчитыват на то, что выйгрыш от include будет больше этого значения.
Но для очень больших объёмов данных, эти десять процентов могут быть критичны.