Хотелось бы посоветовать это. У меня есть таблица, где я хочу отслеживать объект и список ключей, связанных с объектом. Пример:SQL Server - Структурированный индексный указатель для словаря
OBJECTID ITEMTYPE ITEMKEY
-------- -------- -------
1 1 THE
1 1 BROWN
1 2 APPLE
1 3 ORANGE
2 2 WINDOW
Оба OBJECTID и ItemKey имеют высокую селективность (то есть ObjectId и ItemKey очень разнообразны). Мой доступ двумя способами:
По OBJECTID: Каждый раз, когда объект изменяется, список ключевых изменений, чтобы ключ необходим основанный на OBJECTID. Изменения происходят часто.
ITEMKEY: Это для поиска по ключевым словам, а также часто бывает.
Так что я, вероятно, нужно два ключа, и выбрать один для кластерного индекса (тот, который чаще обращались, или там, где я хочу скорость быть, потому что теперь предположим, я буду приоритеты ObjectId для кластерный). Меня смущает то, как я должен его проектировать.
Мои вопросы, что лучше:
а) Кластерный индекс (OBJECTID, ItemType, ItemKey), а затем индекс (ItemKey). Я обеспокоен тем, что, поскольку кластерный индекс настолько велик (2 ints, 1 строка), индекс будет большим, потому что все элементы индекса должны были вернуться к кластерному ключу.
b) Создайте новый столбец с запущенным идентификатором DIRECTORYID (целое число) в качестве первичного ключа и кластерного индекса и объявите два индекса для (OBJECTID, ITEMTYPE, ITEMKEY) и просто (ITEMKEY). Это позволит свести к минимуму пространство индекса, но с более высокими затратами на поиск.
c) Кластерный индекс (OBJECTID, ITEMTYPE, ITEMKEY) и материализованный вид (ITEMKEY, ITEMTYPE, OBJECTID) на нем. Моя логика заключается в том, что это позволяет избежать ключевого поиска и по-прежнему будет столь же большим, как индекс с поиском в: а), по стоимости более высоких накладных расходов.
d) Err ... может быть, есть лучший способ, учитывая требования?
Заранее спасибо, Andrew
Почему вы думаете, что вам нужно класть на '(OBJECTID, ITEMTYPE, ITEMKEY)' вместо '(OBJECTID)' только? – Lucero
Если вы пытаетесь создать высокоэффективный поиск по ключевым словам в SQL Server, вам следует рассмотреть полнотекстовый поиск: http://msdn.microsoft.com/en-us/library/ms142583.aspx –
@Lucero: кластеризация ключ должен быть уникальным - и ObjectId - нет. В этом случае SQL Server добавит четырехбайтовый идентификатор к вашим записям индекса - вы можете избежать этого, выбирая по-настоящему уникальный столбец (INT IDENTITY) для вашего ключа кластеризации. –