1.索引數據結構二叉樹,紅黑樹,Hash,B+樹
2.千萬級數據表如何用索引快速查找
3.如何基於索引B+樹精準建立高性能索引
4.聯合索引底層數據結構又是什麼樣的
5.MySQL索引優化最佳實踐
什麼是索引?
索引是幫助MySQL高效獲取數據的排好序和數據結構
我們索引以及數據表中的數據存儲位置在哪裏?
在我們的磁盤上:sql的data文件夾下。
數據庫的存儲引擎:MyISAM存貯引擎,InnoDB存貯引擎
問題:存儲引擎是形容數據庫的還是形容數據庫表的?
存儲引擎是形容我們數據表的。
MyISAM搜索引擎
InnoDB索引的實現:
- 表數據文件本身就是按B+Tree組織的一個索引結構文件
- 聚集索引-葉節點包含了完整的數據記錄
什麼是聚集索引(索引和數據在一起的是聚集索引),想MyISAM的話是分在兩個表中所以不是聚集索引。 - 面試題:爲什麼InnoDB表必須有主鍵,並且推薦使用整形的自增主鍵?
1.爲什麼必須有主鍵因爲InnoDB它是一個以主鍵進行B+樹數據結構存儲的。如果自己沒建立主鍵,InooDB在後臺會找一個可以代表這張表的唯一標識(沒有重複)來作爲主鍵索引來管理數據,最後MySQL如果沒有找到這樣的唯一標識,他會自動給你生成一列唯一的數據,來幫助我們維護B+樹的結果。
2.爲什麼使用自增整形作爲主鍵,有些公司使用UUID,生成爲主鍵,我們知道如果存在字符串相比較,我們需要參照ASCII表來做對比,而是是一個一個往後坐對比。例:qwer123和qwer124是需要比較到最後一位才知道大小,效率沒有直接兩個整形做對比效率快,包括從存貯大小方面整形也有更大的優勢因爲索引是在磁盤是的越小可存放的數量也就越多。 - 爲什麼非主鍵索引結構葉子節點存儲的是主鍵值?
一致性和節省存儲空間
- 爲什麼不使用hash表和B樹做索引呢?
實際上MySQL對哈希衝突解決的特別好,並且即使數據量特別大的情況下我們依然可以對索引進行hash運算得到相對應的下標獲取內容,既然這麼快99.9%公司不使用呢?因爲以hash表爲索引結構不能解決範圍查詢。同時B樹如果進行範圍查詢是需要不斷的反覆到根節點然後在查詢(效率很低)。 - 我們選擇B+樹作爲我們MySQL儲存索引數據結構,爲什麼就可以解決範圍查詢?
InnoDB存貯引擎
InnoDB不像MyISAM,數據是直接附着在索引下的,不需要再次回到MYD中。
聯合索引的底層儲存結構長什麼樣?
事務
事務的概念:事務是指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功,要麼全部失敗。
在不同的環境中,都可以有事務。對應在數據庫中,就是數據庫事務。
使用方法:
1.開啓事務:start transaction;/begin
2.執行多條sql語句。
3.回滾或者提交:rollback/commit
事務的隔離級別: