[英]MYSQL InnoDB engine indexing (B-Tree)
我有以下user registration table
:
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
是用戶可能每天(甚至每周)更新的字段; 我認為索引這個字段可能不是一個好主意,因為索引會減慢寫操作的速度。 如果有錯請糾正我。 我在其他表格中還有許多其他字段(用戶每天更新的字段,並且他們的更新都顯示在他們訪問的任何頁面上的字段),並且不知道是否也需要對其進行索引
注意:我知道可以查詢一次然后將其緩存,但是,恐怕對表的第一個查詢返回結果集的速度會很慢。
非常感謝
為了提高性能,請將VARCHAR更改為TINYTEXT,這允許行具有固定的大小,從而加快了表掃描的速度。 根據該表,可能會查詢User_name和Email。 將其更改為CHAR並為其編制索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.