mysql索引與鎖的關係 關係型資料庫 索引與鎖

2021-10-20 23:26:25 字數 1331 閱讀 3373

設計乙個關係型資料庫

.png

索引模組

為什麼要使用索引

查詢時間複雜度從o(n)提公升到o(logn)

.png

存在以下弊端,並且會多次io,影響速度。

.png

採用b tree

b tree(多路搜尋樹,並不是二叉的)是一種常見的資料結構。使用b-tree結構可以顯著減少定位記錄時所經歷的中間過程,從而加快訪問速度。按照翻譯,b 通常認為是balance的簡稱。這個資料結構一般用於資料庫的索引,綜合效率較高。

.png

.png

藍色的關鍵字的個數永遠比黃色的孩子個數少乙個

b+ tree

.png

優勢:1、b+ 樹磁碟讀寫代價更低(葉子結點有多個值, 不用頻繁io讀取)

2、b+ 樹查詢效率更加穩定(從根節點到葉子節點長度固定,時間複雜度o(log n))

3、b+ 樹葉子節點有指標鏈結,更有利於對資料庫的掃瞄

hash索引

.png

bitmap索引

.png

主流是b+樹還有雜湊索引 bitmap點陣圖索引(鎖的問題需要考慮)

oracle支援

密集索引與稀疏索引

區別1、密集索引檔案中每個搜尋碼值都對應乙個索引值

2、稀疏索引只為索引碼的某些值建立索引項

.png

如何定位並優化慢查詢sql

1、根據慢日誌定位慢查詢sql

2、使用explain等工具分析sql

3、修改sql或者盡量讓sql走索引

mysql

show variables like '%quer%';

.png

show status like '%slow_queries%';

set global slow_query_log = on;

set global long_query_time = '1';

使用explain select name from person order by name desc;

force index 強制使用某種索引

.png

聯合索引最左匹配原則

.png

鎖模組myisam預設用的是表級鎖,不支援行級鎖 (鎖整張表,相當於不能併發執行,讀鎖沒有執行完畢,不能進行寫鎖操作)

innodb預設用的是行級鎖,也支援表級鎖

mysql預設自動提交事務

for update 或者增刪改排他鎖(寫鎖)

查詢 共享鎖(讀鎖)

.png

.png

.png

.png

.png

mysql鎖和索引關係

在平時我們用mysql的鎖時,一般剛接觸資料庫是很少考慮鎖的效率,一般只求到達防止併發的目的就可以了,但是隨著資料量的增大我們就會發現有很多sql我們已經寫的非常優化了,但是有時候還是很慢,很難找到原因,這時候我們就應該考慮一下是不是mysql的鎖在導致的。我們首先建立乙個新的資料表 這裡我們的主鍵...

mysql是關係型嗎 mysql屬於關係型資料庫嗎

mysql是一種關係型資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性。mysql所使用的 sql 語言是用於訪問資料庫的最常用標準化語言。mysql 軟體採用了雙授權政策,分為社群版和商業版,由於其體積小 速度快 總體擁有成本低,...

mysql的索引和鎖的微妙關係

做專案時由於業務邏輯的需要,必須對資料表的一行或多行加入行鎖,舉個最簡單的例子,圖書借閱系統。假設id 1的這本書庫存為1,但是有2個人同時來借這本書,此處的邏輯為 select restnum from book where id 1 如果restnum大於0,執行update update bo...