設計乙個關係型資料庫
.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...