表型別儲存引擎的選擇
8.1,MyISAM的表支援三種不同的儲存格式:靜態(固定長度)表,動態表,壓縮表
靜態表是預設的儲存方式,每個欄位都是非變長欄位,優點是儲存迅速,容易快取,出現故障容易恢復;缺點是佔用的空間通常會比動態多。【靜態表的資料在儲存時會按照列的寬度定義補足空格,但是在訪問的時候不會得到這些空格,這些空格在返回給應用之前已經去掉,如果儲存的內容後面本來就帶有空格,那麼也會被過濾】
動態表記錄是不固定長度的,優點是佔用空間相對較少但是會頻繁的更新和刪除記錄產生的碎片。需要定期執行OPTIMIZE TABLE語句或者myisamchk-r命令來改善效能,並且在出現故障回覆時較難
壓縮表是需要工具建立的
8.2,InnoDB具有提交,回滾和崩潰恢復的事物安全,但是相對於MyISAM,它寫的處理效率會差一些,並且會佔用更多的磁碟空間已保留資料和索引
8.2.1,【主鍵索引】對於InnoDB來說,自增必然是索引,如果是組合索引也必然是組合索引的第一列,但是對於MyISAM來說,自動增長可以使組合索引的其他列
8.2.2,【外來鍵約束:外來鍵必須在】
RESTRICT和NO ACTION相同,是指限制在子表有關聯記錄的情況下附表不能更新
CASCADE表示父表在更新或者刪除時,更新或者刪除子表對應記錄
SET NULL表示父表在更新或者刪除的時候,子表的對應欄位被SET NULL
eg:
alter table 子表 add constraint 鍵名
foreign key(欄位)
references 父表(欄位)
第一行是說要為子表設定外來鍵,給這個外來鍵起一個名字
第二行是要將本表的某欄位來設定外來鍵
第三行是說這個外來鍵受到的約束來自父表的某欄位
【注:】當某個表被其他表建立了外來鍵參照,那麼該表的對應索引或者主鍵禁止被刪除;當匯入多個表的資料的時候,如果需要忽略之前的匯入順序,可以暫時關閉外來鍵;同樣,在執行LOAD DATA和ALTER TABLE操作的時候,可以通過暫時關閉外來鍵來約束加快處理的速度,關閉的命令是‘SET FOREIGN_KEY_CHECKS = 0’,執行完成之後,通過執行’SET FOREIGN_KEY_CHECKS = 1’,語句改回原狀態
【注:】檢視外來鍵資訊:show create table;或者show table status;
8.2.3 刪除自增長的主鍵id
先刪除自增長在刪除主鍵
Alter table tb change id id int(10);//刪除自增長
Alter table tb drop primary key;//刪除主建
8.2.4新增組鍵
alter table t1 add PRIMARY KEY(ID,createtime)
alter table t1 change id id int not null auto_increment;
alter table t1 auto_increment=1;
8.2.5,【儲存方式:共享表空間儲存,多表空間儲存 P140】
8.3,MEMORY儲存引擎使用存在於記憶體中的內容來建立表,每個MOMERY表只實際對應一個磁碟檔案,格式是.frm。MEMORY型別的表訪問快,因為他的資料是存放在記憶體中的,並且預設使用HASH索引,但是一旦服務關閉,表中的資料就會丟掉
8.4,MERGE儲存引擎是一組MyISAM表的組合,對於MERGE型別表的查詢,刪除,更新操作實際上是對於其中的MyISAM表進行的,對於MERGE的增加操作是通過INSERT_METHOD子句定義插入的表,可以有三個不同的值,使用first或者last是的插入到對應的第一個或者最後一張表中,不定義或者定義為NO表示不能對著MERGE表執行插入操作;可以對錶執行drop操作,但是這只是刪除對於MERGE的定義,對於內部的表沒有任何影響
8.5,選擇合適的儲存引擎
8.5.1,MyISAM:預設的MySQL外掛式儲存引擎,如果應用十一讀操作和插入操作為主,至於很少的更新和刪除操作沒並且對於事物的完整性,併發性要求不是很高,那麼選擇這個引擎是非常合適的。MyISAM實在web,資料倉庫合區和其他應用環境下最常使用的儲存引擎之一
8.5.2,InnoDB:用於事務處理應用程式,支援外來鍵,如果應用對事物的完整性有比較高的要求,在併發條件下要求資料的一致性,資料操作除了插入和查詢外還包括很多的更新,刪除操作,那麼InnoDB引擎儲存是比較適合的選擇,InnoDB儲存引擎除了有效的減低由於刪除和更新導致的鎖定,還可以儲存事物的完整提交和回滾,對於類似計費系統或者財務系統等對於資料準確性要求比較高的,InnoDB都是合適的選擇
8.5.3,MEMORY:將所有資料儲存在RAM中,在需要快速定位記錄和其他類似資料的環境下,可提供極快的訪問,MEMORY的缺陷是對錶的大小有限制,太大的表無法快取在記憶體中,其次要確保表的資料可以恢復,資料庫異常後表中的資料庫是可以恢復的,MEMORY通長是用於更新不太頻繁的小表,用以快速得到訪問結果
8.5.4,MERGE:用於將一些列等同的MyISAMBIAO以邏輯方式整合在一起,並作為一個物件引用他們,MEMGE表的優點在於可以突破單個MyISAM表大小的限制,並且通過將不同的表分佈在多個磁碟上,可以有效的改善MERGE表的訪問效率,這對於諸如資料倉庫等VLDB環境十分適合