雜湊表、有序陣列和搜尋樹。
雜湊表這種結構適用於只有等值查詢的場景
有序陣列索引只適用於靜態儲存引擎
innodb 使用了 b+ 樹索引模型,所以資料都是儲存在b+ 樹中的
b+ 樹能夠很好地配合磁碟的讀寫特性,減少單次查詢的磁碟訪問次數
基於非主鍵索引的查詢需要多掃瞄一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。
主鍵長度越小,普通索引的葉子節點就越小,普通索引占用的空間也就越小
回到主鍵索引樹搜尋的過程,我們稱為回表
避免回表的方法
覆蓋索引-select 主鍵
表級鎖另一類表級的鎖是 mdl(metadata lock)。
當對乙個表做增刪改查操作的時候,加 mdl 讀鎖;當要對錶做結構變更操作的時候,加 mdl 寫鎖。
行鎖myisam 引擎就不支援行鎖
在 innodb 事務中,行鎖是在需要的時候才加上的,但並不是不需要了就立刻釋放,而是要等到事務結束時才釋放。這個就是兩階段鎖協議。
行鎖是在需要的時候才加上的,但並不是不需要了就立刻釋放,而是要等到事務結束時才釋放。這個就是兩階段鎖協議。
所以乙個事務中需要鎖多個行,可以把衝突最多的鎖往後放。
死鎖出現後兩種策略
一般都是第二種,但是時間複雜度o(n) 消耗大量cpu
解決辦法:
確保業務不會出現死鎖
控制併發度-對於相同行的更新,在進去引擎之前排隊。
或者從設計上優化-將一行改多行,減小一行的衝突,這樣需要業務邏輯上詳細設計。
innodb 裡面每個事務有乙個唯一的事務 id,叫作 transaction id。它是在事務開始的時候向 innodb 的事務系統申請的,是按申請順序嚴格遞增的。
資料表中的一行記錄,其實可能有多個版本 (row),每個版本有自己的 row trx_id。
不同版本之間通過 undo log(回滾日誌)來計算得出。
每個事務或者語句有自己的一致性檢視。普通查詢語句是一致性讀,一致性讀會根據 row trx_id 和一致性檢視確定資料版本的可見性。
更新資料都是先讀後寫的,而這個讀,只能讀當前的值,稱為「當前讀」(current read)。
C 學習筆記0408
c 中的析構函式 類的 析構函式 是類的乙個特殊的成員函式,當類的物件超出範圍時執行。析構函式的名稱是在類的名稱前加上乙個波浪形 作為字首,它不返回值,也不帶任何引數。析構函式用於在結束程式 比如關閉檔案 釋放記憶體等 之前釋放資源。析構函式不能繼承或過載。c 繼承 繼承是物件導向程式設計中最重要的...
mysql學習筆記 51 mysql學習筆記
初學mysql時整理,隨時更新 資料操作 增 insert into 表名 字段列表 values 值列表 值列表 如果要插入的值列表包含所有字段並且順序一致,則可以省略字段列表。可同時插入多條資料記錄!replace 與 insert 完全一樣,可互換。insert into 表名 set 欄位名...
mysql學習筆記 51 Mysql 學習筆記
一.首先進入mysql mysql u root p新增使用者許可權設定 grant all privileges on to jerry localhost identified by aa1234567 只允許本機訪問 grant all privileges on to jerry 10.80...