Недавно я столкнулся с индексом в базе данных, которая, как я утверждаю, имеет форму:
CREATE INDEX [IX_Foo] ON [Foo]
( Id ASC )
INCLUDE
( SubId )
В этом конкретном случае проблема производительности, с которой я столкнулась (медленная фильтрация SELECT для Id и SubId), может быть исправлена путем простого перемещения столбца SubId в собственный индекс, а не в качестве включенного столбца.
Это заставило меня подумать, однако, что я вообще не понимаю аргументацию включенных столбцов, когда они вообще могут быть частью самого индекса. Даже если мне не особенно нравятся элементы, находящиеся в самом индексе, есть недостаток, чтобы иметь столбец в индексе, а не просто включаться.
После некоторых исследований, я знаю, что существует ряд ограничений на то, что может идти в индексированный столбец (максимальная ширина индекса и некоторые типы столбцов, которые нельзя индексировать как "изображение" ). В этих случаях я вижу, что вам придется включать столбец в данные индексной страницы.
Единственное, о чем я могу думать, это то, что если в SubId есть обновления, строка не потребуется перемещать, если столбец включен (хотя значение в индексе нужно будет изменить). Есть ли что-то еще, что мне не хватает?
Я рассматриваю возможность использования других индексов в базе данных и смещения включенных столбцов в самом индексе, где это возможно. Было бы ошибкой?
В первую очередь меня интересует MS SQL Server, но также приветствуется информация о других механизмах БД.