2016-08-26 2 views
0

У меня есть следующие user registration table:MYSQL InnoDB двигатель индексации (B-Tree)

 ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     User_name VARCHAR(35) NOT NULL, 
     Full_name VARCHAR(55) NOT NULL, 
     User_vars VARCHAR(255) NOT NULL, 
     BirthDay DATE NOT NULL, 
     password CHAR(70) NOT NULL, 
     Security_hint VARCHAR(27) NOT NULL, 
     Email VARCHAR(225) NOT NULL, 
     userType ENUM ('a','b','c','d') NOT NULL DEFAULT 'a', 
     Signup_Date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
     activation TINYINT(1) UNSIGNED NOT NULL, 
     Ip BINARY(16) NOT NULL, 
     PRIMARY KEY (ID), 
     UNIQUE KEY User_name (User_name,Email) 

Я действительно путают ли я должен индексировать поля BirthDay, Signup_Date, Full_name, User_vars and userType как эта информация должна отображаться на любой странице пользователя посещения.

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

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

Большое спасибо

+1

Индексирование зависит от запросов, которые вы планируете запускать. Возможно, вы можете ответить несколькими примерными запросами –

ответ

3

Для изменения нужно произвести VARCHAR к TINYTEXT, который позволяет строки, чтобы иметь фиксированный размер, тем самым ускоряя сканирования таблиц. На основе вероятных запросов таблицы вы найдете имя пользователя и адрес электронной почты. Измените их на CHAR и индексируйте их.

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