MySQL中Key與Index的區別和聯絡

2021-10-06 07:21:27 字數 1265 閱讀 3455

在mysql學習中遇到了key和index兩個關鍵字,對錶結構中索引的不理解,查詢資料進行歸納總結。

key 是資料庫的物理結構,它包含兩層意義,一是約束(偏重於約束和規範資料庫的結構完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key 等。

mysql中的key是同時具有constraint和index的意義。

mysql requires every key also be indexed, that's an implementation detail specific to mysql to improve performance.
index是資料庫的物理結構,它只是輔助查詢的,它建立時會在另外的表空間(mysql中的innodb表空間)以乙個類似目錄的結構儲存。索引要分類的話,分為字首索引、全文本索引等;因此,索引只是索引,它不會去約束索引的字段的行為。

例如:create table t(id int, index inx_tx_id (id));

總結我們說索引分類,分為主鍵索引、唯一索引、普通索引(這才是純粹的index)等,也是基於是不是把index看作了key。比如 create table t(id int, unique index inx_tx_id (id)); 這裡的index相當於key的效果。

————————————————

索引被用來快速找出在乙個列上用一特定值的行。沒有索引,mysql不得不首先以第一條記錄開始並然後讀完整個表直到它找出相關的行。表越大,花費時間越多。如果表對於查詢的列有乙個索引,mysql能快速到達乙個位置去搜尋到資料檔案的中間,沒有必要考慮所有資料。如果乙個表有1000行,這比順序讀取至少快100倍。注意你需要訪問幾乎所有1000行,它較快的順序讀取,因為此時我們避免磁碟尋道。

所有的mysql索引(primary、unique和index)在b樹中儲存。字串是自動地壓縮字首和結尾空間。

索引用於:

快速找出匹配乙個where子句的行。

當執行聯結時,從其他表檢索行。

對特定的索引列找出max()或min()值。

如果排序或分組在乙個可用鍵的最左面字首上進行(例如,order by key_part_1,key_part_2),排序或分組乙個表。如果所有鍵值部分跟隨desc,鍵以倒序被讀取。

在一些情況中,乙個查詢能被優化來檢索值,不用諮詢資料檔案。如果對某些表的所有使用的列是數字型的並且構成某些鍵的最左面字首,為了更快,值可以從索引樹被檢索出來。

簡單概括:key包含約束和索引,index是索引。

MySQL中Index與Key的區別

2010 03 12 admin 看似有差不多的作用,加了key的表與建立了index的表,都可以進行快速的資料查詢。他們之間的區別在於處於不同的層面上。key即鍵值,是關係模型理論中的一部份,比如有主鍵 primary key 外來鍵 foreign key 等,用於資料完整性檢否與唯一性約束等。...

Mysql中key和index的區別點整理

我們先來看下 alter table reportblockdetail add key taskcode taskcode alter table reportblockdetail drop key taskcode 嗯這確實是比較容易混淆的地方。在我們使用mysql中可能壓根不會注意這個問題,...

MySQL裡的Key和Index有什麼不同

key 是資料庫的物理結構,它包含兩層意義,一是約束 偏重於約束和規範資料庫的結構完整性 二是索引 輔助查詢用的 包括primary key,unique key,foreign key 等。mysql中的key是同時具有constraint和index的意義。index是資料庫的物理結構,它只是輔...