沒有索引,mysql不得不首先以第一條記錄開始並然後讀完整個表直到它找出相關的行。所有的mysql索引(primary、unique和index)在b樹中儲存。字串是自動地壓縮字首和結尾空間。
索引用於:
快速找出匹配乙個where子句的行;
當執行聯結時,從其他表檢索行;
對特定的索引列找出max()或min()值;
如果排序或分組在乙個可用鍵的最左面字首上進行(例如,order by key_part_1,key_part_2),排序或分組乙個表。
如何建立高效能的索引,《高效能mysql》一書中講的很詳細。
key即鍵值,是關係模型理論中的一部份,比如有主鍵(primary key),外來鍵(foreign key)等,用於資料完整性檢查與唯一性約束等。
它包含兩層意義和作用:
一是約束(偏重於約束和規範資料庫的結構完整性),
二是索引(輔助查詢用的)。
也就是說key具有索引(index)的功能。
note that 「primary」 is called primary key not index.
key is something on the logical level, describes your table and database design (i.e. enforces referential integrity …)
index is something on the physical level, helps improve access time for table operations.
behind every pk there is (usually) unique index created (automatically).
索引(index)和約束(key)的區別主要在於二者的出發點不同,索引(index)負責維護表的查詢和操作速度,約束(key)負責維護表的完整性。
而有這個困惑的話,很可能是由於mysql中有乙個奇怪現象:
為什麼這樣做呢?原因是:
mysql中的約束效果是通過索引來實現的,mysql資料庫判斷是否當前列是否unique就是通過unique索引判斷的。
primary key 有兩個作用,一是約束作用(constraint),用來規範乙個儲存主鍵和唯一性;二是在此key上建立了乙個主鍵索引;
primary key 約束:唯一標識資料庫表中的每條記錄;
主鍵必須包含唯一的值;
主鍵列不能包含 null 值;
每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵。
(primary key 擁有自動定義的 unique 約束)
primary key的乙個或多個列必須為not null,如果列為null,在增加primary key時,列自動更改為not null。
unique key 也有兩個作用,一是約束作用(constraint),規範資料的唯一性,但同時也在這個key上建立了乙個唯一索引;
unique 約束:唯一標識資料庫表中的每條記錄。
unique 和 primary key 約束均為列或列集合提供了唯一性的保證。
(每個表可以有多個 unique 約束,但是每個表只能有乙個 primary key 約束)
unique key 的列可以為null。
foreign key也有兩個作用,一是約束作用(constraint),規範資料的引用完整性,但同時也在這個key上建立了乙個index;
可見,mysql的key是同時具有constraint和index的意義,這點和其他資料庫表現的可能有區別。因此建立key也有如下幾種方式:
(1)在字段級以key方式建立, 如 create table t (id int not null primary key);
(2)在表級以constraint方式建立,如create table t(id int, constraint pk_t_id primary key (id));
(3)在表級以key方式建立,如create table t(id int, primary key (id));
其它key建立類似,但不管那種方式,既建立了constraint,又建立了index,只不過index使用的就是這個constraint或key。
最後總結下:
在理論上是不能將mysql的key和index劃等號的,他們不是一回事,但在實際使用中,他們基本沒有區別。
MySQL key與index的區別
一 key key 是資料庫的物理結構,處於模型層面的,它包含兩層意義和作用,一是約束 偏重於約束和規範資料庫的結構完整性 二是索引 輔助查詢用的 包括primary key,unique key,foreign key 等。primary key 有兩個作用,一是約束作用 constraint 用...
MySQL unique和index的關係
可以認為,mysql中唯一性約束必然跟著有索引。1.建表時設定某字段為unique,則mysql自動為該自動增加乙個索引,索引名字與列名相同 create table ss a int unique 則a欄位上自動產生乙個索引 2.設定已存在的字段為唯一性,則也會自動為其產生索引 想不產生索引都不行...
Index 和 Type 的區別
原文 index vs.type by adrien grand 譯者 fengchang 對於 es 的新使用者來說,有乙個常見的問題 要儲存一批新的資料時,應該在已有 index 裡新建乙個 type,還是給它新建乙個 index?要想回答這個問題,我們必須先理解這兩者是怎麼實現的。過去,我們為...