69pao国产精品视频-久久精品一区二区二三区-精品国产精品亚洲一本大道-99国产综合一区久久

MySQL 主鍵索引和聚簇索引的區(qū)別

mysql 主鍵索引和聚簇索引的區(qū)別

1. 主鍵索引和聚簇索引的區(qū)別

mysql 聚簇索引的葉子節(jié)點就是數(shù)據(jù)節(jié)點,主鍵索引就是聚簇索引嗎?答案是否定的。

在 mysql 數(shù)據(jù)庫 innodb 引擎里面,主鍵索引確實就是聚簇索引。但是 myisam 引擎里面主鍵索引并不是聚簇索引。

2. 聚簇索引生成規(guī)則

對于 innodb,主鍵毫無疑問是一個聚簇索引。但是當(dāng)一個表沒有主鍵,或者沒有一個索引,innodb 會如何處理呢?

  • 1. 如果一個主鍵被定義了,那么這個主鍵就是作為聚簇索引。
  • 2. 如果沒有主鍵被定義,那么該表的第一個唯一非空索引被作為聚簇索引。
  • 3. 如果沒有主鍵也沒有合適的唯一索引,那么innodb內(nèi)部會生成一個隱藏的主鍵作為聚簇索引,這個隱藏的主鍵是一個6個字節(jié)的列,改列的值會隨著數(shù)據(jù)的插入自增。
  • 4.自增主鍵會把數(shù)據(jù)自動向后插入,避免了插入過程中的聚簇索引排序問題。

聚簇索引的排序,必然會帶來大范圍的數(shù)據(jù)的物理移動,這里面帶來的磁盤 io 性能損耗是非常大的。 而如果聚簇索引上的值可以改動的話,那么也會觸發(fā)物理磁盤上的移動,于是就可能出現(xiàn) page 分裂,表碎片橫生。所以不應(yīng)該修改聚簇索引。

下一節(jié):mysql 回表查詢和索引覆蓋

mysql 教程

相關(guān)文章