0

У меня есть структура таблицы, как показано ниже:Кандидат в некластеризованный индекс

FeatureList

ID - BIGINT - Primary Key - Clustered Index 
VIN - VARCHAR(50) 
Text - VARCHAR(50) 
Value - VARCHAR(50) 

Большая часть запроса я выполнить на этом, как:

SELECT * FROM FeatureList WHERE VIN = 'ABCD' --- Will give multiple records 

OR 

DELETE FROM FeatureList WHERE VIN = 'ABCD' 

I хотите знать, является ли столбец VIN хорошим кандидатом для некластеризованного индекса? Или это может ухудшить производительность?

+0

Почему PK является BIGINT? У вас действительно будет больше двух миллиардов функций в этой таблице? В любом случае, не зная больше о вашей системе и о том, как дополнительные/более широкие индексы могут повлиять на общую рабочую нагрузку, может возникнуть больше смысла сделать кластер VIN более сложным. Тогда, по крайней мере, поиск не понадобится, чтобы получить другие столбцы в запросе SELECT * ... –

+0

Левая фара, правая фара, переднее колесо слева, правое колесо справа ... Да, вы можете полностью преодолеть функции 2B на автомобиль – billinkc

+0

Не на этом этапе .... в настоящее время я могу видеть, как он вырастет до .. 5 до 10 миллионов записей ... Но есть ли вред в объявлении его как BIGINT? – Akon

ответ

0

Не объявляя индекс по VIN абсолютно будет резко снижает производительность. Вы делаете небольшой удар по производительности для каждой вставки, удаления или обновления с использованием VIN. Чтение (особенно после того, как вы попадете в миллионы записей) будет работать на порядки быстрее.

Что касается BIGINT против INT, я обычно отправляюсь на BIGINT. Да, это занимает немного больше места на диске. Да, это занимает немного больше памяти. Однако плюсовая сторона для меня заключается в том, что мне никогда не приходится беспокоиться о переносе таблицы (и каждой другой таблицы, которая принимает идентификатор как внешний ключ) в BIGINT. Был там. Сделал это. Дополнительное пространство стоит того.

+0

В таблице теперь есть миллионы записей. В зависимости от запроса, который я опубликовал, имеет смысл добавить NCI в столбец VIN. Некоторые говорят напротив. – Akon

+1

@Akon: это сильно зависит от **, сколько ** строк из ваших миллионов будет возвращено вашим запросом. Также: использование 'SELECT *' делает менее вероятным использование индекса; лучше получить ** только ** столбцы, которые вам ** действительно нужны ** - не только все. Так что да - 'VIN' определенно является кандидатом - вам нужно будет добавить индекс и измерить, действительно ли это поможет вашим запросам. –

+0

'SELECT * FROM FeatureList WHERE VIN = 'ABCD'', это даст приблизительно от 5 до 10 до 15 записей. Не играет роль WHERE в NCI – Akon

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