MySQL-37:記憶體臨時表
37.1 臨時表的組織結構
InnoDB引擎: B+樹方式的組織結構,前面是索引,節點是索引+資料,節點是有序的。
Memory引擎: 索引是hash索引,陣列以陣列的方式存放,先來先插入到結尾,陣列中有空洞,則下次的資料插入會補到該位置,陣列中資料是無序,索引也是無序的。
從上可見Memory引擎和InnoDB引擎的組織結構是不一樣的:
- Memory引擎採用資料和索引分開存放
- InnoDB引擎採用索引組織表的形式
Memory引擎和InnoDB引擎的不同點:
- 資料和索引的組織方式
- 當資料出現空洞,因為是否有序決定插入資料時是否需要大變動
- 資料位置發生變化的時候,InnoDB 表只需要修改主鍵索引,而記憶體表需要修改所有索引;
Memory引擎需要做範圍查詢的時候,它用不上索引,因為是無序的,需要走全表掃描。
37.2 索引
我們通過給Memory引擎下的資料新增B+數索引,可以達到目的,新增索引的效果如下:
我們通過如下語句:
alter table t add index a_btree_index using btree (id);
當出現訪問訪問時,它會自動走B+樹索引。
37.3 Memory 臨時表的問題
鎖粒度問題:
記憶體表只支援表級鎖,索引在事務併發的支援上會很低效,因為一旦有事務獲取了該鎖,就會導致整張表鎖住。
資料持久化問題:
資料存放到記憶體中,如果資料庫異常重啟,就會導致所有的記憶體表清空。當資料庫重啟回來,他會在binlog中寫入delete from t
,以此來達到操作與記錄一致的情況。
但是在兩個庫互為主備庫的情況下,備庫異常重啟,binlog同步到主庫,會導致主庫的記憶體表莫名其妙的消失。
相關文章
- delphi記憶體表記憶體
- 記憶體表(FDMEMTABLE)記憶體
- mysql最大表記憶體MySql記憶體
- PostgreSQL:臨時表SQL
- MySQL臨時表MySql
- delphi 新版記憶體表 FDMemTable記憶體
- mysql 建立臨時表MySql
- MySQL之臨時表MySql
- 記憶體技術詞彙表記憶體
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- MRC 時代的記憶體管理記憶體
- optee記憶體管理和頁表建立記憶體
- mysql臨時表,臨時表空間,ibtmp1表空間暴增原因初探MySql
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- SQLServer臨時表的使用SQLServer
- MySQL 中的臨時表MySql
- oracle 臨時表的使用Oracle
- ORACLE臨時表總結Oracle
- 臨時筆記11筆記
- Redis 記憶體突增時,如何定量分析其記憶體使用情況Redis記憶體
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理 記憶體管理概述記憶體
- SDRAM記憶體條時序特點記憶體
- Oracle 臨時表 OracleDataAdapter 批次更新OracleAPT
- Java記憶體區域(執行時資料區域)和記憶體模型(JMM)Java記憶體模型
- 記憶體安全週報 | 0928厚積薄發,臨危不亂記憶體
- 聊聊 記憶體模型與記憶體序記憶體模型
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- Java記憶體區域與記憶體溢位異常 - 執行時資料區Java記憶體溢位
- Redis 過期時間與記憶體管理Redis記憶體
- Java 執行時的記憶體劃分Java記憶體
- Fdmemtable 記憶體表儲存圖片的例子記憶體
- 遊戲記憶體對比普通記憶體區別 遊戲記憶體和普通記憶體相差大嗎?遊戲記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露