Индексируйте столбец varchar - PullRequest
7 голосов
/ 03 ноября 2010

Я спросил Google, но я все еще в замешательстве.

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

2) Индексировать столбец с символом VS столбец Varchar.

Спасибо

Ответы [ 3 ]

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

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

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

0 голосов
/ 03 ноября 2010

Обычно производительность

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...