mysql 原理 ~ 索引通说
簡介: 來說說索引吧
目的:為了加快數據庫的數據查找速度,索引應用而生
基礎知識
基本定義
? 1 遍歷 所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由于二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。
? 3 深度 節點的層數
? 4 NX樹 寬度定義為具有最多結點數的層中包含的結點數。
數據模型的選擇
? ?目的 為了讓一個查詢盡量少地讀磁盤,就必須讓查詢過程訪問盡量少的數據庫
? ?1 讓樹容納更多的子節點,也即是N叉數,N 叉樹中的N取決于數據塊的大小
? ?2 N 叉樹由于在讀寫上的性能優點,以及適配磁盤的訪問模式,已經在數據庫中廣泛應用了
問題系列
? 1 為什么mysql提倡使用自增主鍵
? ? ? 1 自增主鍵是順序插入,不會引起頁分裂,減少索引維護成本
? ? ? 2 自增主鍵int類型越短,普通索引的葉子節點就越小,普通索引占用的空間也就越小
? ? ? 3 采用pt-osc操作int自增主鍵類型的速度遠遠大于非自增長主鍵
? 2? innodb為什么采用B+數索引
? ? 關于B+樹你要知道的
? ? ?1 B+樹是平衡多路查找樹? ??
? ? ?2 B+樹是多路查找樹,一個節點能放n個值,n = 16K / 每個索引值的大小。
? ? ?3 B+樹的路數為n+1,n是每個節點存在的值數量,例如每個節點存放16個值,那么這棵樹就是17路。
? ? ?4 B+樹索引并不能找到一個給定鍵值的具體行。B+樹只能找到存放數據行的具體頁,然后把頁讀入到內存中,再在內存中查找指定的數據
? ? 總結B+數能容納更多的節點,存儲更多的key,并且只有葉子節點存儲data. 減少了磁盤IO的交互次數,提高了效率,所有的葉子結點和相連的節點使用鏈表相連,便于區間查找和遍歷。
? 3 innodb的索引存儲形式
? ? ?1 innodb每個索引都自己維護一個B+數索引
? ? ?2 主鍵索引的葉子節點包含data域,非主鍵索引的葉子節點對應的是主鍵值
? ? ? ? ? ? select * from b where id= 直接搜索id的B+數
? ? ? ? ? ? select * from b where k= 根據K先查詢查詢K的B+數,活的相應的主鍵,再到主鍵維護的B+數上尋找對應的數據
轉載于:https://www.cnblogs.com/danhuangpai/p/9997028.html
總結
以上是生活随笔為你收集整理的mysql 原理 ~ 索引通说的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL每秒57万的写入,带你飞~
- 下一篇: [性能优化]UITableView性能优