Что я должен индексировать?Имя пользователя или идентификатор пользователя? - PullRequest
5 голосов
/ 04 января 2011

У меня довольно простая таблица (простите за ошибки / глупости, я все еще учусь. Написано для MySQL) :

CREATE TABLE IF NOT EXISTS  `userdata` (
    `userid`    UNSIGNED int(18446744073709551615) AUTO_INCREMENT, 
    `username`  char(255) NOT NULL,
    `password`  char(255) NOT NULL,
    `salt`      char(255) NOT NULL,
    `email`     char(255) NOT NULL,

    PRIMARY KEY(`userid`)
);

Я читал, что добавление индекса улучшаетпроизводительность запроса, так как он не должен просматривать всю базу данных.Вместо этого он будет просматривать индекс и сопоставлять данные (поправьте меня, если я ошибаюсь).

Я узнал, как создать индекс достаточно хорошо, но не то, что я должен индексировать.
Должен ли я иметь свой индекс для имен пользователей?Адреса электронной почты, идентификатор пользователя или какое-либо поле, которое я еще не добавил?

Ответы [ 4 ]

6 голосов
/ 04 января 2011

У вас должен быть индекс практически для любого столбца, для которого вы выполняете поиск по ключевым словам. Что-то собирается сделать where userid = ? в одном из ваших запросов? Затем индекс на userid. Вы собираетесь делать поиск на username? Затем индекс по имени пользователя. А как насчет password? Наверное, нет, так что не беспокойтесь.

4 голосов
/ 04 января 2011

вы должны ТОЛЬКО создать индекс, основанный на фактическом использовании столбца

использование в ГДЕ :
если у вас никогда не было WHERE username='xyz', индекс не нужен
если у вас их много, добавьте индекс

использование в JOIN :
если у вас никогда не было JOIN xxxx ON x.userid=u.userid, то индекс не нужен
если у вас их много, добавьте индекс

2 голосов
/ 04 января 2011

В каких полях вы будете искать? Это должны быть ваши первые кандидаты в индексы. Также индексируйте все столбцы, которые станут внешними ключами в других таблицах (userid кажется вероятным кандидатом).

0 голосов
/ 04 января 2011

Идентификатор Primay должен перейти к идентификатору пользователя.Это очень полезно сейчас и в долгосрочной перспективе.

...