面試的時候 , 大部分面試官會問mysql的索引問題 , 也是必問的問題 , 但是感覺大部分面試官都是把網上的面試題原封不動的說出來 , 要開發人員來應試答題.
這樣的形式 , 我的理解是既不能體現出面試官的能力 , 又不能考察到程式員的mysql功力 , 基本是無意義的 .
如何在平常的開發中體現出這些存在于理論上的原理性的知識點 , 是我一直思考的問題.
在開發的時候 , 當構思完成后 , 第一步就是設計表結構 . 我們設計表 , 基本的思路就是
設計一個欄位自增 , 設計其他欄位 , 設定自增id為主鍵 , 表的存盤引擎為innodb .
在這個程序中 , 就能體現出了很多索引方面的東西 , 設計主鍵的目的是使整張表根據主鍵聚簇起來 , 變成一個樹的樣子 .樹的葉子節點就是實際記錄 , 其他分叉就是根據主鍵生成的 , 如果要查詢資料 , 根據主鍵id查 , 速度最快. 這樣的形式還有個名詞叫聚簇索引
當然除了根據主鍵id查 , 我們還會根據其他欄位進行查詢 , 需要我們提前想好未來的查詢sql是什么 , 被查詢的欄位是什么 , 要查詢出的欄位是什么 .
如果我們有根據兩個欄位進行的and條件查詢 , 就可以把這兩個欄位做成一個聯合索引 , 比如欄位是a , b , 我們設計的聯合索引就可以是(a,b) .
設計完成后會在表的整體之外多了這樣一個(a,b)的索引樹 , 這個索引樹的葉子節點是主鍵 , 我們查詢的時候會現在這個(a,b)索引樹里查到葉子主鍵 , 再通過主鍵在剛才的主鍵樹上查到葉子記錄 , 這樣就會出現兩次查詢的程序.如果我們要查詢的欄位資料只有a , b ,那么就直接在剛才的(a,b)索引樹取出來了 , 這個名詞就叫覆寫索引
聯合索引的最左前綴 , 又是什么呢?
因為b+樹 , 這樣的索引樹 , 跟二叉搜索樹一樣, 都是要求有序的 . 我們的(a,b) 也是會是排好序的 , 排序就要有個先后 , 先排好a , 在a的基礎上再排b . 因此就會在查詢的程序中不能跳過a直接去查b , 就體現出了最左前綴.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75626.html
標籤:PHP
上一篇:OSX下安裝PHP7教程詳解
