Производительность и размеры некластеризованных индексов уменьшаются с увеличением размера ключа кластеризации? - PullRequest
1 голос
/ 25 января 2010

Выдержка из: http://www.sqlservercentral.com/articles/Indexing/68563/

Ширина ключа кластеризации однако, не влияет только на кластерный индекс. Ключ кластеризации, будучи адресом строки, находится в каждый некластеризованный индекс. следовательно широкий ключ кластеризации увеличивает размер всех некластеризованных индексов, снижение их эффективности, а также

Почему размер указателя на страницу данных в некластеризованном индексе должен увеличиваться, если sizeof (int *) совпадает с sizeof (char *). Или есть какой-то другой механизм адресации, о котором я не знаю?

Ответы [ 2 ]

3 голосов
/ 25 января 2010

Указатель не указывает на страницу данных: он указывает на кластеризованный индекс. Тонкий, но отличается от того, где нет кластерного индекса, где каждая запись индекса NC указывает на идентификатор строки (RID) на страницах данных.

Таким образом, если в качестве ключа char(10), каждая запись индекса NC имеет 10-байтовый указатель. Если у вас есть целое число, то это 4 байта.

Для char против int есть и другие соображения: как минимум сопоставление (которое определяет регистр, акцент, кана и чувствительность к ширине).

И ваша строка из 4 байтов применяется только к char(4). nchar(4) - это 8 байтов, varchar(4) - от 2 до 6 байтов (длина 2 байта), nvarchar(4) - от 2 до 10 байтов.

0 голосов
/ 25 января 2010

В кластеризованной таблице значение ключа кластеризации является указателем строки и, следовательно, неявно добавляется к каждой записи.

Если (col1, col2, col3) является кластеризованным ключом, то индекс на col4 фактически является индексом на (col4, col1, col3, col3).

Его размер, конечно, зависит от размеров col1, col2 и col3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...