MySQL中的聚簇索引和非聚簇索引有以下不同點(diǎn):
存儲(chǔ)方式:聚簇索引中,數(shù)據(jù)行的順序與索引的順序一致,索引直接指向數(shù)據(jù)行。非聚簇索引中,索引是獨(dú)立于數(shù)據(jù)行的,索引中的每個(gè)條目都包含一個(gè)指向?qū)?yīng)數(shù)據(jù)行的指針。
數(shù)據(jù)訪問(wèn):使用聚簇索引進(jìn)行數(shù)據(jù)訪問(wèn)時(shí),可以直接通過(guò)索引訪問(wèn)數(shù)據(jù)行,因?yàn)樗鼈兇鎯?chǔ)在一起。而使用非聚簇索引進(jìn)行數(shù)據(jù)訪問(wèn)時(shí),需要先通過(guò)索引找到對(duì)應(yīng)的數(shù)據(jù)行指針,然后再通過(guò)指針訪問(wèn)數(shù)據(jù)行,因此需要額外的IO操作。
排序:聚簇索引中,數(shù)據(jù)行存儲(chǔ)的順序與索引的順序一致,所以當(dāng)按照索引進(jìn)行排序時(shí),不需要額外的排序操作。非聚簇索引中,索引與數(shù)據(jù)行是獨(dú)立的,所以當(dāng)按照索引進(jìn)行排序時(shí),需要進(jìn)行額外的排序操作。
索引更新:聚簇索引中,數(shù)據(jù)行的插入和更新可能導(dǎo)致數(shù)據(jù)行的移動(dòng),因?yàn)閿?shù)據(jù)行的順序與索引的順序一致。非聚簇索引中,數(shù)據(jù)行的插入和更新不會(huì)導(dǎo)致數(shù)據(jù)行的移動(dòng),因?yàn)樗饕c數(shù)據(jù)行是獨(dú)立的。
綜上所述,聚簇索引適合于頻繁進(jìn)行范圍查詢和按照索引順序訪問(wèn)數(shù)據(jù)的場(chǎng)景,而非聚簇索引適合于頻繁進(jìn)行單條記錄查詢的場(chǎng)景。