1. 程式人生 > >MySQL表類型的選擇

MySQL表類型的選擇

存儲 動態表 出現 缺點 log 文件名 insert 工具 默認值

P131)創建表時的默認引擎是InnoDB,如果要修改默認的存儲引擎,可以在參數文件中設置default-table-type。查看當前的默認存儲引擎,可以使用一下命令:

技術分享

技術分享

創建新表的時候可以通過增加ENGINE關鍵字設置新建表的存儲引擎。也可以通過ALTER TABLE語句,將一個已經存在的表修改成其他的存儲引擎。

技術分享


一. MyISAM(P134)

MyISAM不支持事務,不支持外鍵,其優勢是訪問速度塊,對事務完整性沒有要求或者以SELECT、INSERT為主的應用基本上都可以使用這個引擎來創建表。

每個MyISAM在磁盤上存儲為3個文件,其文件名都和表名相同,但拓展名分別為:

  • .frm(存儲表定義);
  • .MYD(MYData,存儲數據);
  • .MYI(MYIndex,存儲索引)。

數據文件和索引文件可以放在不同的目錄,平均分布IO,獲得更快的速度。

MyISAM表還支持3種不同的存儲格式,分別是:

  • 靜態(固定長度)表;
  • 動態表;
  • 壓縮表。

靜態表是默認的存儲格式,其中的字段都是非變長字段,這樣每個記錄的長度都是固定的,優點是存儲速度非常迅速,容易緩存,出現故障容易恢復;缺點是占用的空間通常比動態表多。靜態表的數據在存儲時會按照列的寬度定義補足空格,然後在獲取的時候將最後的空格全部去掉。

技術分享

動態表中包含變長字段,記錄不是固定長度的,這樣存儲的優點是占用的空間少,但頻繁的更新和刪除記錄會產生碎片,需要定期執行OPTIMIZE TABLE

語句或者myisamchk-r命令來改善性能,並且在出現故障時恢復相對困難。

壓縮表由myisampack工具創建,占據非常小的磁盤空間。因為每個記錄是被單獨壓縮的,所有只有非常小的訪問開支。


二. InnoDB(P136)

InnoDB表的自動增長列可以手工插入,但是插入的值如果是空或者0,則實際插入的將是自動增長後的值。

可以通過ALTER TABLE table_name ATUO_INCREMENT=n;語句強制設置自動增長列的初始值,默認從1開始,但是該強制的默認值是保留在內存中的,如果該值在使用之前數據庫重啟,那麽這個強制的默認值就會丟失,就需要在數據庫啟動以後重新設置。

可以使用select LAST_INSERT_ID();

查詢當前線程最後插入記錄使用的值。如果一次插入了多條記錄,那麽返回的是第一條記錄使用的自動增長值。

對於InnoDB表,自動增長列必須是索引列。如果是組合索引,也必須是組合索引的第一列,但是對於MyISAM表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引的前面幾列進行排序後遞增的

MySQL表類型的選擇