這個問題很刁鑽!
答案是錯的。
的確在mysql數據庫innodb引擎里面,主鍵的確就是聚集索引。
但是myisam引擎里面主鍵也不是聚集索引。
另外在sql server中還可以顯示的指定聚集索引。
CREATE TABLE student
(
stud_id INT IDENTITY(1,1) NOT NULL,
stud_name NVARCHAR(20) NOT NULL,
CONSTRAINT pk_student PRIMARY KEY NONCLUSTERED (stud_id)
);
聚集索引決定了數據庫的物理存儲結構,而主鍵只是確定表格邏輯組織方式。這兩者不可混淆!
對於Innodb,主鍵毫無疑問是一個聚集索引。但是當一個表沒有主鍵,或者沒有一個索引,Innodb會如何處理呢。請看如下規則:
1.如果一個主鍵被定義了,那么這個主鍵就是作為聚集索引
2. 如果沒有主鍵被定義,那么該表的第一個唯一非空索引被作為聚集索引
3. 如果沒有主鍵也沒有合適的唯一索引,那么innodb內部會生成一個隱藏的主鍵作為聚集索引,這個隱藏的主鍵是一個6個字節的列,改列的值會隨着數據的插入自增。
4.自增主鍵會把數據自動向后插入,避免了插入過程中的聚集索引排序問題。聚集索引的排序,必然會帶來大范圍的數據的物理移動,這里面帶來的磁盤IO性能損耗是非常大的。 而如果聚集索引上的值可以改動的話,那么也會觸發物理磁盤上的移動,於是就可能出現page分裂,表碎片橫生。所以不應該修改聚集索引。