Mysql索引大概有五種類型:
普通索引(INDEX):最基本的索引,沒(méi)有任何限制
唯一索引(UNIQUE):與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引(PRIMARY):它 是一種特殊的唯一索引,不允許有空值。
全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可用于innodb表, 用于在一篇文章中,檢索文本信息的, 針對(duì)較大的數(shù)據(jù),生成全文索引很耗時(shí)和空間。
聯(lián)合(組合)索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。
這里我們來(lái)看下主鍵索引(特殊的唯一索引)。
主鍵索引一般建議使用數(shù)據(jù)表的自增唯一主鍵來(lái)作為主鍵索引使用。
主鍵索引,簡(jiǎn)稱主鍵,原文是PRIMARY KEY,由一個(gè)或多個(gè)列組成,用于唯一性標(biāo)識(shí)數(shù)據(jù)表中的某一條記錄。一個(gè)表可以沒(méi)有主鍵,但最多只能有一個(gè)主鍵,并且主鍵值不能包含NULL。
在MySQL中,InnoDB數(shù)據(jù)表的主鍵設(shè)計(jì)我們通常遵循幾個(gè)原則:
1、采用一個(gè)沒(méi)有業(yè)務(wù)用途的自增屬性列作為主鍵;
2、主鍵字段值總是不更新,只有新增或者刪除兩種操作;
3、不選擇會(huì)動(dòng)態(tài)更新的類型,比如當(dāng)前時(shí)間戳等。
在MyISAM引擎中,唯一索引除了key值允許存在NULL外,其余的和主鍵索引沒(méi)有本質(zhì)性區(qū)別。也就是說(shuō),在MyISAM引擎中,不允許存在NULL值的唯一索引,本質(zhì)上和主鍵索引是一回事。
而在InnoDB引擎中,主鍵索引和輔助索引的區(qū)別就很大了。主鍵索引會(huì)被選中作為聚集索引,而唯一索引和普通輔助索引間除了唯一性約束外,在存儲(chǔ)上沒(méi)本質(zhì)區(qū)別。
從查詢性能上來(lái)說(shuō),在MyISAM表中主鍵索引和不允許有NULL的唯一索引的查詢性能是相當(dāng)?shù)模贗nnoDB表通過(guò)唯一索引查詢則需要多一次從輔助索引到主鍵索引的轉(zhuǎn)換過(guò)程。InnoDB表基于普通索引的查找代價(jià)更高,因?yàn)槊看螜z索到結(jié)果后,還需要至少再多檢索一次才能確認(rèn)是否還有更多符合條件的結(jié)果,主鍵索引和唯一索引就不需要這么做了。
關(guān)于主鍵索引,我能想到的基本上就是這些了。這個(gè)沒(méi)有sql的驗(yàn)證。
單純的就是我自己在這叨叨的一些我理解的一些知識(shí)點(diǎn)。
有好的建議,請(qǐng)?jiān)谙路捷斎肽愕脑u(píng)論。
歡迎訪問(wèn)個(gè)人博客
https://guanchao.site