我讀了一個地方,不應該在表的列上創建很多索引,因爲它會降低操作的性能。MySQL在UNIQUE NOT NULL列上創建索引
但是,當我創建一個具有UNIQUE NOT NULL字段的表時,MySQL正在自己創建所有字段上的索引。這不會降低性能嗎?如果是,我需要更改默認行爲的標誌?如果不是,那麼我錯在哪裏?
我的表:
CREATE TABLE Users(
Id_usr INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(Id_usr),
Email_id varchar(45) UNIQUE NOT NULL,
username varchar(30) UNIQUE NOT NULL,
userpass varchar(30) NOT NULL
);
當我看到phpMyAdmin的表:
Indexes: Documentation
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Edit Drop Drop PRIMARY BTREE Yes No Id_usr 0 A
Edit Edit Drop Drop Email_id BTREE Yes No Email_id 0 A
Edit Edit Drop Drop username BTREE Yes No username 0 A
索引是一種折衷。它們減緩了表寫入操作(即插入和更新),同時加快了讀取操作(即選擇,重複檢查等)。如果你希望MySQL在列上強制執行唯一性約束,那麼在該列上使用索引是正確的方法。除非您意識到這是一個問題,否則不要過早微觀地優化額外索引的成本。 – eggyal
索引的一般經驗法則是將任意字段放在'where','join'或'order by'中使用的任何字段上。索引有助於加快搜索速度,其代價是減慢插入/更新。如果您從未將某個字段用作除存儲位置之外的任何字段,則不要對其編制索引。 –