通常我們說的索引大致分為兩類,聚集索引和非聚集索引,非聚集索引也就是常用的普通索引,包括(唯一索引,全文索引等)
(以下討論的 是mysql innodb引擎 )
聚集索引
聚集索引也叫聚簇索引,參考 https://www.cnblogs.com/shanshanlaichi/p/6568097.html
博文中的比喻
一個表就像是我們以前用的新華字典,聚集索引就像是拼音目錄,而每個字存放的頁碼就是我們的數(shù)據(jù)物理地址,我們?nèi)绻樵円粋€“哇”字,我們只需要查詢“哇”字對應(yīng)在新華字典拼音目錄對應(yīng)的頁碼,就可以查詢到對應(yīng)的“哇”字所在的位置,而拼音目錄對應(yīng)的A-Z的字順序,和新華字典實際存儲的字的順序A-Z也是一樣的,如果我們中文新出了一個字,拼音開頭第一個是B,那么他插入的時候也要按照拼音目錄順序插入到A字的后面
非聚集索引,索引的邏輯順利和磁盤上的邏輯順序不同
就像字典中的按偏旁來查找字,偏旁的順序和字所在頁數(shù)上的順序并不相同
比喻很生動,關(guān)于這兩個索引的信息也可以參考這篇博文
一個表中,只能有一個聚集索引,可以有多個非聚集索引,mysql 通常把一個表的主鍵作為聚集索引
關(guān)于聚集索引和非聚集索引的查找效率上,大致差不多,但是由于聚集索引是物理上的相對順序,所以連續(xù)記錄的查找上,聚集索引稍快,平常使用二者速度大致