平衡多路查詢樹 樹的左右兩邊的層級數相差不會大於1 非葉子節值大於左邊子節點、小於右邊子節點!!!
mysql索引存在硬碟上 b+樹子節點才存資料(非葉結點僅具有索引作用),且是有序的(範圍查詢),層級也不高,減少io b樹不管葉子節點還是非葉子節點,都會儲存資料,這樣導致在非葉子節點中能儲存的指標數量變少(有些資料也稱為扇出),指標少的情況下要儲存大量資料,只能增加樹的高度,導致io操作變多,查詢效能變低!!!!!
m階 中間節點都至少包含ceil(m/2)個孩子,最多有m個孩子 每乙個葉子節點都包含k-1個元素,其中 m/2 <= k <= m
b+樹插入是自下而上,當節點儲存大於m-1就**,向上級擴充套件。 刪除一樣!!小於(m/2)就收縮 三層的b+樹就可以存放2千萬級別的資料!!!
樹儲存在硬碟中,每個節點的讀取(或訪問),都對應一次磁碟io操作。樹的高度就等於每次查詢資料時磁碟io操作的次數。
b+樹節點存那些資料 非葉節點存關鍵字資訊,a-z排序找到根節點具體的id,在查主鍵id索引樹!!!
那些操作會鎖表
for update 表鎖,會鎖表
事務資料庫插入過程
整體過程
死鎖 多個程序在執行過程中因爭奪資源而造成的一種僵局 a b執行緒互相獲得對方需要的鎖 你等我 我等你
互斥條件:乙個資源每次只能被乙個程序使用。
請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。!!
不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
資料庫悲觀鎖 for update 和 for update nowait
樂觀鎖 一開始假設不會造成衝突,提交的時候再進行資料衝突檢測。
innodb實現了以下兩種型別的行鎖。
共享鎖(s):允許乙個事務去讀一行,阻止其他事務獲得相同資料集的排他鎖。 lock in share 多個事務可以同時為乙個物件加共享鎖!!!
排他鎖(x):允許獲取排他鎖的事務更新資料,阻止其他事務取得相同的資料集共享讀鎖和排他寫鎖。 for upadte 其他事務不能在加索
另外,為了允許行鎖和表鎖共存,實現多粒度鎖機制,innodb還有兩種內部使用的意向鎖(intention locks),這兩種意向鎖都是表鎖。
意向共享鎖(is):事務打算給資料行共享鎖,事務在給乙個資料行加共享鎖前必須先取得該錶的is鎖。
意向排他鎖(ix):事務打算給資料行加排他鎖,事務在給乙個資料行加排他鎖前必須先取得該錶的ix鎖。
lock tables orders read local,order_detail read local;
unlock tables;
lock in share mode
myisam和innodb都支援表級鎖。
行級鎖只有innodb支援,也是mysql中的最小粒度鎖
表級鎖lock table student read;#讀鎖 unlock tables;#解鎖 student表都只能讀取 只能執行select操作
lock table balance write;#寫鎖 乙個會話裡面都能操作 如果是寫鎖沒有解鎖,新的 會話 讀寫 都處於被鎖狀態。
行級鎖select *** lock in share mode; 只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖!!!!
排它鎖select *** for upadte; 開啟了排它鎖,其他會話依然不能修改資料。但是可以普通的讀取
innodb 意向共享鎖(is)和意向排他鎖(ix) 該事務可以需要鎖定行的表上面新增乙個合適的意向鎖 意向鎖是innodb自動加的,不需使用者干預。
對於update、delete和insert語句,innodb會自動給涉及資料集加排他鎖(x);對於普通select語句,innodb不會加任何鎖;事務可以通過以下語句顯示給記錄集加共享鎖或排他鎖。
mysql索引分為普通索引、唯一索引、主鍵索引、組合索引、全文索引 create index index_name on table(column); unique primary
索引不會包含有null值的列
組合索引:在多個欄位上建立索引,遵循最左字首原則
mysql每次查詢只使用乙個索引!!! 和全表掃瞄比起來,去分析兩個索引b+樹更加耗費時間
經常插入、刪除、修改的表要減少索引
索引何時失效 explain語句
mysql能估計出全表掃瞄比使用索引更快時,不使用索引 !!!
組合索引未使用最左字首 例如組合索引(a,b),where b=b不會使用索引;
like未使用最左字首 以%開頭;
搜尋乙個索引而在另乙個索引上做order by,where a=a order by b,只使用a上的索引,因為查詢只使用乙個索引
or會使索引失效。如果查詢字段相同,也可以使用索引。例如where a=a1 or a=a2(生效),where a=a or b=b(失效)!!!!!!! 有or必全有索引!!
在索引列上的操作,函式(upper()等)、or、!=(<>)、not in等;
需要型別轉換
where中索引列有運算 where中索引列使用了函式
資料庫系列 資料庫事務 鎖 死鎖
保障資料庫事務的鎖 非鎖 死鎖 資料庫事務級別 事務級別的使用 注意事項 髒讀 不可重複讀 幻讀 不可重複讀 幻讀 事務的實現原理 寫鎖 讀寫鎖的公升級關係 也是產生死鎖的原因 共享鎖 獨佔鎖 意向共享鎖 事務在給乙個資料行加共享鎖前必須先取得該錶的is鎖。意向排他鎖 事務在給乙個資料行加排他鎖前必...
利用悲觀鎖解決資料庫死鎖
reference url it168技術文件 這邊講述的資料庫死鎖是由於查詢條件順序不對而造成的一類,主要是兩個執行緒在同時對乙個資料庫表進行操作時,出現了下列情況,假設乙個資料庫表 內有5行資料,執行緒1需要對1 4行資料進行update操作,而執行緒2需要對2 5行資料進行update操作,但...
資料庫 鎖以及死鎖的處理
鎖分類 參見 acid 原子性,一致性,隔離性,永續性 四特性,事務是恢復和併發控制的基本單位。1.樂觀鎖 樂觀鎖認為乙個使用者讀資料的時候,別人不會去寫自己所讀的資料,所以不做控制。樂觀鎖是基於系統儲存邏輯,限制較大,可能會引起髒讀等情況,得根據實際情況靈活運用 在儲存過程,函式使用 2.悲觀鎖 ...