MySQL索引之主鍵索引。本站提示廣大學習愛好者:(MySQL索引之主鍵索引)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL索引之主鍵索引正文
在MySQL裡,主鍵索引和幫助索引分離是甚麼意思,有甚麼差別?
前次的分享我們引見了集合索引和非集合索引的差別,本次我們持續引見主鍵索引和幫助索引的差別。
1、主鍵索引
主鍵索引,簡稱主鍵,原文是PRIMARY KEY,由一個或多個列構成,用於獨一性標識數據表中的某一筆記錄。一個表可以沒有主鍵,但最多只能有一個主鍵,而且主鍵值不克不及包括NULL。
在MySQL中,InnoDB數據表的主鍵設計我們平日遵守幾個准繩:
1、采取一個沒有營業用處的自增屬性列作為主鍵;
2、主鍵字段值老是不更新,只要新增或許刪除兩種操作;
3、不選擇會靜態更新的類型,好比以後時光戳等。
這麼做的利益有幾點:
1、新增數據時,因為主鍵值是次序增加的,innodb page產生決裂的幾率下降了;可以參考以往的分享“[MySQL FAQ]系列 — 為何InnoDB表要建議用自增列做主鍵”;
2、營業數據有變革時,不修正主鍵值,物理存儲地位產生變更的幾率下降了,innodb page中發生碎片的幾率也下降了。
MyISAM表由於是堆組織表,主鍵類型設計方面便可以不消這麼講求了。
2、幫助索引
幫助索引,就是我們慣例所指的索引,原文是SECONDARY KEY。幫助索引裡還可以再分為獨一索引,非獨一索引。
獨一索引其實應當叫做獨一性束縛,它的感化是防止一列或多列值存在反復,是一種束縛性索引。
3、主鍵索引和幫助索引的差別
在MyISAM引擎中,獨一索引除key值許可存在NULL外,其他的和主鍵索引沒有實質性差別。也就是說,在MyISAM引擎中,不許可存在NULL值的獨一索引,實質上和主鍵索引是一回事。
而在InnoDB引擎中,主鍵索引和幫助索引的差別就很年夜了。主鍵索引會被選中作為集合索引,而獨一索引和通俗幫助索引間除獨一性束縛外,在存儲上沒實質差別。
從查詢機能下去說,在MyISAM表中主鍵索引和不許可有NULL的獨一索引的查詢機能是相當的,在InnoDB表經由過程獨一索引查詢則須要多一次從幫助索引到主鍵索引的轉換進程。InnoDB表基於通俗索引的查找價值更高,由於每次檢索到成果後,還須要至多再多檢索一次能力確認能否還有更多相符前提的成果,主鍵索引和獨一索引就不須要這麼做了。
經由測試,對100萬行數據的MyISAM做隨機檢索(整數類型),主鍵和獨一索引的效力根本一樣,通俗索引的檢索效力則慢了30%以上。換成InnoDB表的話,獨一索引比主鍵索引效力約慢9%,通俗索引比主鍵索引約慢了50%以上。
關於MySQL的各個方面年夜家想懂得甚麼,可以直接留言答復,我會從當選擇一些熱點話題停止分享。 同時願望年夜家多多轉發,多一些浏覽量是老葉持續盡力分享的絕佳助力,感謝年夜家 :)