2010-08-13 3 views
0

У меня есть таблица, которая отображает права пользователя на данный объект. Таким образом, это, по существу, таблица соединений для трех разных таблиц. (Object, пользователь, и разрешение)SQL некластеризованный индекс

Значения каждой строки всегда будет уникальным для всех 3-х колонок, но не любой 2.

Мне нужно создать некластеризованный индекс. Я хочу поместить индекс в внешние ключи к объекту и пользователю, но мне интересно, следует ли разместить его на всех трех столбцах.

+0

это MS SQLdatabase –

+0

зависит! какие запросы попадут в эти таблицы? –

+1

@Mitch Wheat: вы знаете, как * запросы * ... kinda sorta :) –

ответ

0

Если у вас есть некоторые сомнения, сформулируйте запрос (ы), который вы намереваетесь выполнить против этих таблиц, и запустите мастер настройки запросов SSMS. Это должно помочь вам начать работу в правильном направлении.

Рассматривается количество строк в этих трех таблицах. Если подсчет строк будет небольшим, возможно, даже не стоит добавлять индексы. Сканирование таблицы, вероятно, будет сделано в любом случае.

+0

таблица разрешений будет очень маленькой и не изменяться, но таблица пользователей будет большой, а таблица объектов будет самой большой –

1

«Значение каждой строки всегда будет уникальным для всех 3-х колонка»

Вы могли бы быть заинтересованы, чтобы знать, что ограничения уникальности реализованы в виде индексов SQL Server. Так что если у вас есть (или хотят) ограничение резервного копирования, что уникальный иск о ваших, у вас уже есть индекс на всех 3.

CREATE UNIQUE NONCLUSTERED INDEX idx_unique_perms ON UserPermissions 
(
    ObjectId ASC, 
    UserId ASC, 
    PermissionID ASC 
) 

Если вы один, только не забудьте заказать колонки для высокой селективности.

Смежные вопросы