MySQL資料庫索引知識點總結

2021-10-10 02:34:26 字數 1674 閱讀 5858

1.mysql資料庫索引都有哪些資料結構

b+和hash

2.聊下hash

hash查詢是把key通過hash生成下標然後獲取對應的值,它的主要特點是快速精確查詢,但是不支援範圍查詢。如果要是做成索引,速度是很慢的,要全部掃瞄。

3.hash表在那些場景比較適合

等值查詢的場景,就只有kv(key,value)的情況,例如redis、memcached等這些nosql的中介軟體。

有序陣列,它在等值查詢的和範圍查詢的時候都很nice。

有序的適合靜態資料,因為如果我們新增、刪除、修改資料的時候就會改變他的結構。⽐如你新增⼀個,那在你新增的位置後⾯所有的節點都會後移,成本很⾼。

可以⽤來做靜態儲存引擎啊,⽤來儲存靜態資料,例如你2023年的⽀付寶賬單,2023年的**購物記錄等等都是很合適的,都是不會變動的歷史資料。

4.聊下二叉樹

⼆叉樹是有序的,所以是⽀持範圍查詢的。

但是他的時間複雜度是o(log(n)),為了維持這個時間複雜度,更新的時間複雜度也得是o(log(n)),那就得保持這棵樹是完全平衡⼆叉樹了。

但是隨著資料的增長,數就會變得很高,查詢的成本就會隨者樹的增高而增加。

5.b樹

在同樣的元素下,b樹要比完全平衡的二叉樹還要「矮」,因為b樹的同乙個節點可以儲存多個元素。

b+樹

⼦節點中,並且葉⼦節點之間⽤指標相連。

b+樹是b樹的公升級版,只是把⾮葉⼦節點冗餘⼀下,這麼做的好處是為了提⾼範圍查詢的效率

提⾼了的原因也⽆⾮是會有指標指向下⼀個節點的葉⼦節點,b+樹⾥的元素也是有序的。

總結

1.最左字首匹配原則。mysql會⼀直向右匹配直到遇到範圍查詢 (>,

2.盡量選擇區分度⾼的列作為索引,區分度的公式是 count(distinct col)/count(*)。表示欄位不重複的⽐率,⽐率越⼤我們掃瞄的記錄數就越少。

3.索引列不能參與計算,盡量保持列「⼲淨」。⽐如, from_unixtime(create_time)='2016-06-06』就不能使⽤索引,原因很簡單,b+樹中儲存的都是資料表中的字段值,但是進⾏檢索時,需要把所有元素都應⽤函式才能⽐較,顯然這樣的代價太⼤。所以語句要寫成 :create_time=unix_timestamp(『2016-06-06』)。

4.盡可能的擴充套件索引,不要新建⽴索引。⽐如表中已經有了a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可。

5.單個多列組合索引和多個單列索引的檢索查詢效果不同,因為在執⾏sql時,mysql只能使⽤⼀個索引,會從多個單列索引中選擇⼀個限制最為嚴格的索引。 「合併索引」策略簡單來講,就是使⽤多個單列索引,然後將這些結果⽤「union或者and」來合併起來

mysql資料庫知識點總結

mysql屬於關係型資料庫,關係型資料庫是指採用了關係模型來組織資料的資料庫,而關係模型就是指二維 模型,所以,關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。1.mysql資料庫中常用的概念有 1 高併發讀寫效能低 由於 的使用者併發性高,往往是每秒上萬次的讀寫請求,雖然mysql等關...

MySql資料庫知識點總結01

資料庫從大的方面可以分為兩大部分,分別為底層的儲存系統也就是檔案系統,和上層的程式例項組成,程式例項有儲存管理 快取管理 日誌管理 許可權管理 容災管理 sql解析 索引 鎖等 程式實 儲存管理 快取管理 日誌管理 許可權管理 容災管理 sql解析 索引 鎖等 儲存 檔案系統 mysql體系結構 m...

資料庫知識點總結

mysql支援的索引型別 b tree索引 隔離級別 預設使用可重複讀 mvcc 多版本併發控制機制。鎖機制可以控制併發操作,但是其系統開銷較大,而mvcc可以在大多數情況下代替行級鎖,使用mvcc,能降低其系統開銷。人們一般把基於鎖的併發控制機制稱成為悲觀機制,而把mvcc機制稱為樂觀機制。這是因...