對于題目中提出的問題,可以拆分來一步步解決。在 MySQL 中 KEY 和 INDEX 是同義。那這個問題就可以簡化為 PRIMARY KEY,UNIQUE KEY 和 INDEX 的區別。而這三者也正好是索引的劃分,主鍵索引,唯一索引和普通索引(INDEX)。
使用 INDEX 來加速從數據庫中讀取數據。INDEX 通常加在那些 JOIN, WHERE,和 ORDER BY 子句的列上。
創建索引時,需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。 實際上,索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄。
索引也有它的缺點:雖然索引提高了查詢速度,卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。
MySQL 中 KEY 與 INDEX 區別
KEY 通常是 INDEX 同義詞。如果關鍵字屬性 PRIMARY KEY 在列定義中已給定,則 PRIMARY KEY 也可以只指定為KEY。這么做的目的是與其它數據庫系統兼容。 PRIMARY KEY 是一個唯一 KEY,此時,所有的關鍵字列必須定義為NOT NULL。如果這些列沒有被明確地定義為NOT NULL,MySQL應隱含地定義這些列。
KEY 即鍵值,是關系模型理論中的一部份,比如有主鍵(PRIMARY KEY),外鍵(Foreign KEY)等,用于數據完整性檢否與唯一性約束等。而 INDEX 則處于實現層面,比如可以對表個的任意列建立索引,那么當建立索引的列處于SQL語句中的Where條件中時,就可以得到快速的數據定位,從而快速檢索。至于UNIQUE INDEX,則只是屬于INDEX中的一種而已,建立了UNIQUE INDEX表示此列數據不可重復,猜想MySQL對UNIQUE INDEX類型的索引可以做進一步特殊優化吧。
于是,在設計表的時候,KEY只是要處于模型層面的,而當需要進行查詢優化,則對相關列建立索引即可。
KEY
KEY 是數據庫的物理結構,包含兩層含義,一是約束,偏重于約束和規范數據庫的結構完整性,二是索引,輔助查詢。
•primary key 有兩個作用,一是約束作用(constraint),用來規范一個存儲主鍵和唯一性,但同時也在此key上建立了一個index;
•unique key 也有兩個作用,一是約束作用(constraint),規范數據的唯一性,但同時也在這個key上建立了一個index;
•foreign key也有兩個作用,一是約束作用(constraint),規范數據的引用完整性,但同時也在這個key上建立了一個index;
可見,key是同時具有constraint和index的意義.
INDEX
INDEX 也是數據庫的物理結構,但他只有輔助查詢作用,它會在創建時占用另外的空間。索引分為前綴索引、全文索引等。索引只是索引,不會去約束索引字段的行為。
PRIMARY KEY 和 UNIQUE KEY 的區別
PRIMARY KEYs(主鍵) 和 UNIQUE KEYs(唯一鍵約束) 是類似的, PRIMARY KEY通常是一列,也有可能多列,通常由他來決定一行數據(row)。 一張表只能有一個 PRIMARY KEY,但可以有很多 UNIQUE KEY。 當給一列設置為 UNIQUE KEY 之后,不能有兩行在該列上有相同的數據。 PRIMARY KEY 不允許有 NULL值,但是 UNIQUE KEY 可以。
新聞熱點
疑難解答