2010-11-03 3 views
7

Я спросил у Google, но я все еще смущен.Индекс a varchar column

1) Есть проблема с индексированием столбца Varchar. Когда я не должен, и когда я должен

2) Индекс столбца столбца VS Varchar.

Благодаря

+0

Если u может поддерживать существующий ответ или что-то добавить, пожалуйста, сделайте это. – Costa

ответ

4

1 - Index это, если вы запрашиваете его, и он является достаточно селективным. Если это столбец, где 90% значений одинаковы, то не будет много смысла.

2 - Это не вопрос, но я думаю, вы хотите знать, хотите ли вы. Да, если вы запросите его, и он соответствует указанным выше критериям.

+1

Действительно, индексирование (N) столбцов varchar отлично работает. Только gotcha должен был следить за ограничение ширины 900 байтов – StuartLC

+0

Существуют проблемы с индексами с varchar (max) и nvarchar (max), поэтому они не должны использоваться, если вы не собираетесь переполнять размер обычного varchar и nvarchar поле. – HLGEM

+0

@HLGEM - Вы можете уточнить? – JNK

0

В целом производительность

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

Однако во время реализации вы знаете, что использовать это дорого (случай, акценты, длина и т. Д.) По сравнению с использованием суррогатного столбца «userid», который более эффективен как индекс. Говоря это, у вас будет индекс по имени, так как он должен быть уникальным.

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

Как единый индекс для таблицы без FK, то она не существует ни здесь, ни там.

Наконец, я бы просто использовал char/varchar для таких вещей, как язык ISO или коды валют (DE, EN, GBP, CHF и т. Д.). Но мой обрезанный вариант может быть честным ...

4
  • ad 1) Да, ограничение в 900 байт, огромные ключи, множество индексных страниц, большое количество операций ввода-вывода, неэффективные операции с индексами. Вывод: НЕ ИСПОЛЬЗУЙТЕ, если ваш varchar не превышает 50 символов.
  • объявление 2) То же, что 1. Реальная разница между char против прогноза varchar имеют фиксированный размер по сравнению с переменным размером (то есть. char(100)) всегда занимает 100 байт страницы данных, varchar(100) занимает до 100)
Смежные вопросы