索引是一種特殊的檔案(innodb 資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。索引不是萬能的,索引可以加快資料檢索操作,但會使資料修改操作變慢。每修改資料記錄,索引就必須重新整理一次。為了在某種程度上彌補這一缺陷,許多 sql 命令都有乙個 delay_key_write 項。這個選項的作用是暫時制止 mysql 在該命令每插入一條新記錄和每修改一條現有之後立刻對索引進行重新整理,對索引的重新整理將等到全部記錄插入/修改完畢之後再進行。在需要把許多新記錄插入某個資料表的場合,delay_key_write 選項的作用將非常明顯。
mysql索引分類有5種,分別為普通索引,索引,主索引,外來鍵索引,復合索引。下面就mysql索引5種分類做詳細的介紹。
1.普通索引
普通索引(由關鍵字 key 或 index 定義的索引)的任務是加快對資料的訪問速度。因此,應該只為那些最經常出現查詢條件(where column =)或排序條件(order by column)中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊、最緊湊的資料列(如乙個整數型別的資料列)來建立索引。
2.索引
普通索引允許被索引的資料列包含重複的值。比如說,因為人有可能同名,所以同乙個姓名在同乙個「員工個人資料」資料表裡可能出現兩次或更多次。
如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該用關鍵字unique 把它定義為乙個索引。這麼做的好處:一是簡化了 mysql 對這個索引的管理工作,這個索引也因此而變得更有效率;二是 mysql 會在有新記錄插入資料表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位裡出現過了;如果是,mysql 將拒絕插入那條新記錄。也就是說,索引可以保證資料記錄的獨特性。事實上,在許多場合,人們建立索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複。
3.主索引
在前面已經反覆多次強調過:必須為主鍵欄位建立乙個索引,這個索引就是所謂的「主索引」。主索引區別是:前者在定義時使用的關鍵字是 primary 而不是 unique。
4.外來鍵索引
如果為某個外來鍵字段定義了乙個外來鍵約束條件,mysql 就會定義乙個內部索引來幫助自己以最有效率的方式去管理和使用外來鍵約束條件。
5.復合索引
索引可以覆蓋多個資料列,如像 index (columna, columnb) 索引。這種索引的特點是 mysql 可以有選擇地使用乙個這樣的索引。如果查詢操作只需要用到 columna 資料列上的乙個索引,就可以使用復合索引 index(columna, columnb)。不過,這種用法僅適用於在復合索引中排列在前的資料列組合。比如說,index (a,b,c) 可以當做 a 或 (a,b) 的索引來使用,但不能當做 b、c 或 (b,c) 的索引來使用。
從理論上講,完全可以為資料表裡的每個字段分別建乙個索引,但mysql 把同乙個資料表裡的索引總數限制為16個。另外,索引還會在硬碟上占用相當大的空間。因此應該只為最經常查詢和最經常排序的資料列建立索引。想要學習更多的mysql 索引的相關知識可以**本站的mysql教程,掌握mysql全套知識。
mysql 雜湊索引 MySQL索引之雜湊索引
雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...
mysql主鍵索引 MySQL索引之主鍵索引
在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...
mysql聚集索引 MySQL索引之聚集索引介紹
在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...