標籤:工具 啟動 str 寬度 優勢 強制 包含 相同 效能
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表類型的選擇