Сомнение в кластерном и некластеризованном индексе - PullRequest
0 голосов
/ 15 ноября 2009

У меня есть сомнения, что если в моей таблице нет таких ограничений, как Первичный ключ, Внешний ключ, Уникальный ключ и т. Д., То могу ли я создать кластерный индекс для таблицы, и кластерный индекс может иметь дублирующиеся записи? Мой второй вопрос: где мы должны использовать некластеризованный индекс и когда его полезно и полезно создавать в таблице? Мой третий вопрос: Как мы можем создать 249 некластеризованных индексов в таблице. Имеет ли это значение Создание некластеризованного индекса на 249 столбцах?

Можете ли вы помочь мне устранить мою путаницу в этом.

1 Ответ

0 голосов
/ 16 ноября 2009

Во-первых, определение кластеризованного индекса состоит в том, что это физическое упорядочение данных на диске. Каждый раз, когда вы выполняете вставку в эту таблицу, новая запись будет размещаться на физическом диске в порядке, соответствующем ее значению в столбце кластерного индекса. Поскольку это физическое расположение на диске, это (A) наиболее быстро доступный столбец в таблице, но (B) можно определить только один кластеризованный индекс для таблицы. Какой столбец (или столбцы) вы используете в качестве кластеризованного индекса, зависит от самих данных и их использования. Первичные ключи обычно являются кластеризованным индексом, особенно если первичный ключ является последовательным (например, целое число, которое увеличивается автоматически с каждой вставкой). Это обеспечит самую быструю функциональность вставки / обновления / удаления. Если вас больше интересует выполнение операций чтения (выберите * из таблицы), вам может потребоваться кластеризация по столбцу «Дата», поскольку в большинстве запросов указывается либо дата в предложении where, либо предложение group by, либо оба.

Во-вторых, кластерные индексы (по крайней мере в известных мне БД) не обязательно должны быть уникальными (они МОГУТ иметь дубликаты). Заставить колонку быть уникальной - это отдельный вопрос. Если кластерный индекс является первичным ключом, его уникальность является функцией первичного ключа.

В-третьих, я не могу следить за вашими вопросами, касающимися 249 столбцов. Некластеризованный индекс - это в основном инструмент для ускорения запросов за счет дополнительного дискового пространства. Трудно представить себе случай, когда необходимо создать индекс для каждого столбца. Если вы хотите быстрое эмпирическое правило ...

  1. Напишите запрос, используя вашу таблицу.
  2. Если для объединения требуется столбец, индексируйте его.
  3. Если в столбце where используется столбец, индексируйте его.

Помните, что все индексы делают для вас ускорение ваших запросов. Если запросы выполняются быстро, не беспокойтесь о них.

Это всего лишь эскиз эскиза большой темы. Есть множество более информативных / исчерпывающих ресурсов по этому вопросу, а некоторые зависят от системы баз данных ... просто Google.

...