關于MySQL的主鍵,默認是否為聚集索引,這是許多人都非常關心的問題。
首先,我們需要明確一下聚集索引(Clustered Index)和非聚集索引(Non-clustered Index)的概念。
聚集索引是將數據行的物理順序與索引的邏輯順序一致,因此只能有一個聚集索引,其存儲方式決定了表中數據的物理存儲方式。
而非聚集索引是通過一個單獨的數據結構來存儲數據的索引信息,其存儲方式與數據行的存儲方式是獨立的。
那么MySQL的主鍵是否默認是聚集索引呢?
CREATE TABLE `test` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上面是一個簡單的創建表的SQL語句,其中`id`列為主鍵??梢钥吹?,在InnoDB引擎下,主鍵默認就是聚集索引。
CREATE TABLE `test` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
而在MyISAM引擎下,默認則是非聚集索引。
因此,對于MySQL的主鍵到底是默認聚集索引還是非聚集索引,要具體情況具體分析。