1:首先mysql的基本儲存結構是頁(記錄都存在頁裡邊):每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應的槽,然後再遍歷該槽對應分組中的記錄即可快速找到指定的記錄
2:索引做了些什麼可以讓我們查詢加快速度呢?其實就是將無序的資料變成有序(相對):
乙個沒加主鍵的表,它的資料無序的放置在磁碟儲存器上,一行一行的排列的很整齊, 跟我認知中的「表」很接近。如果給表上了主鍵,那麼表在磁碟上的儲存結構就由整齊排列的結構轉變成了樹狀結構,也就是說的「平衡樹」結構,換句話說,就是整個表就變成了乙個索引。
整個表變成了乙個索引,也就是所謂的「聚集索引」。 這就是為什麼乙個表只能有乙個主鍵, 乙個表只能有乙個「聚集索引」,因為主鍵的作用就是把「表」的資料格式轉換成「索引(平衡樹)」的格式放置
物都是有兩面的, 索引能讓資料庫查詢資料的速度上公升, 而使寫入資料的速度下降,原因很簡單的, 因為平衡樹這個結構必須一直維持在乙個正確的狀態, 增刪改資料都會改變平衡樹各節點中的索引資料內容,破壞樹結構, 因此,在每次資料改變時, dbms必須去重新梳理樹(索引)的結構以確保它的正確,這會帶來不小的效能開銷。
每次給字段建乙個新索引, 欄位中的資料就會被複製乙份出來, 用於生成索引。 因此, 給表新增索引,會增加表的體積, 占用磁碟儲存空間。
非聚集索引和聚集索引的區別在於, 通過聚集索引可以查到需要查詢的資料, 而通過非聚集索引可以查到記錄對應的主鍵值 , 再使用主鍵的值通過聚集索引查詢到需要的資料
3:b+樹是平衡樹的一種。平衡樹:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。如果一棵普通的樹在極端的情況下,是能退化成煉表的(樹的優點就不復存在了)b+樹是平衡樹的一種,是不會退化成煉表的,樹的高度都是相對比較低的。
4:雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。
5:innodb:主流的還是使用b+樹索引比較多,對於雜湊索引,innodb是自適應雜湊索引的
6:聚集和非聚集索引:
區別:7:鎖
首先,從鎖的粒度,我們可以分成兩大類:
行鎖
不同的儲存引擎支援的鎖粒度是不一樣的:
innodb只有通過索引條件檢索資料才使用行級鎖,否則,innodb將使用表鎖
表鎖下又分為兩種模式:
排他鎖(x鎖):允許獲得排他鎖的事務更新資料,阻止其他事務取得相同資料集的共享讀鎖和排他寫鎖。
mysql怎麼用鎖 MySQL的鎖應該怎麼用 一
先說重點 鎖是為了固化資源狀態的,加鎖之後一定會有狀態判斷 或加鎖語句的條件裡含有這個 只加鎖不判斷狀態,那這個鎖就沒啥用。如果你加了鎖,但是後邊並沒有回滾機制,那你就要考慮下你 的邏輯是不是有問題了。要有自檢的功能,第一不能相信使用者,第二不能相信呼叫你函式的其它程式設計師。盡量保證你的 在被重複...
mysql索引,事務,鎖
索引就是用來優化查詢,加快查詢速度。索引是優化查詢的最有效手段 優勢 優化查詢加快檢索速度 根據索引分組和排序可以加快分組和排序 劣勢 索引本身也是表,在一定程度上會占用儲存空間 create table mytable id int not null,username varchar 16 not...
mysql鎖與索引
當走索引就是使用行鎖,當索引失效就會使用表鎖 對索引使用一下操作導致索引失效 預先關閉自動提交事務功能 set autocommit 0 視窗a執行更新語句,當前事務對其他食物不可見 已提交讀 update test innodb lock set b a1 where a 1 select fro...