InooDB與Memory
數據組織方式不同:
- InnoDB引擎把數據放在主鍵索引上,其他索引上保存的是主鍵id。為索引組織表
- Memory引擎把數據單獨存放,索引上保存數據位置。為堆組織表
典型不同處:
1、InnoDB表的數據總是有序存放的,而Memory表數據是按照寫入順序存放、
2、當數據文件有空洞時,InnoDB表在插入新數據時,為了保證數據有序性,總是放在右側。而Memory表找到空位就可以插入
3、數據位置發生變化的時候,InnoDB表修改的是主鍵索引,Memory表需要修改索引值
4、InnoDB支持變長數據類型,不同記錄的長度可能不同。Memory表使用固定長度,每行數據長度相同
Memory表默認使用的是hash索引,所以不支持范圍查詢,當然也可以修改:
alter table t1 add index a_btree_index using btree (id);
Memory 表用于臨時表
Memory表有兩個問題:
1、Memory不支持行鎖,只支持表鎖,不適用于并發場合
2、Memory數據放在內存中,數據庫重啟,所有Memory表都會被清空
Memory表用于臨時表好處:
1、臨時表不會被其他線程訪問,沒有并發性的問題
2、臨時表重啟后也是需要刪除的,清空數據問題不大
3、備庫的臨時表也不會影響主庫的用戶線程
并且相對于InnoDB作為臨時表,它還有以下好處:
1、Memory使用內存表不需要寫磁盤,往臨時表寫數據速度更快
2、Memory索引使用hash索引,查找速度比B-Tree索引快
3、對于小數據的臨時表,占用內存有限