MySQL 羅縷紀存(更新於2020 12 29)

2021-10-13 05:19:48 字數 1130 閱讀 6896

一、前言

二、正文

mysql 執行計畫 type 字段 all 和 index 區別是什麼?

為什麼提出這個問題呢?all 不就是全表掃瞄 index 全索引掃瞄呀!innodb索引組織表底層資料都儲存聚簇索引那麼所謂的 「全表掃瞄」 和 「全索引掃瞄」 掃的是**?如果你也有相同疑問,那麼請接著往下看吧。

all

是一種非常暴力的查詢方式,相當於將整張表都掃瞄一遍,例如某學校有五萬名學生,此時要查出叫 「張三」 的學生,使用 all 型別的訪問方法就是按個把五萬名學生挨個找一遍,即便找的第一名學生就叫 「張三」 也不能確實後面 49999 裡沒有也叫張三,所以還會接著找把五萬名學生都找一遍。

index

表明已經使用了索引,但是訪問的方法和 all 類似,接著拿 「從五萬名學生找出張三」 的栗子?來講,已經按照學生的姓名排好了順序,所以找到第乙個 「張三」 後面的 「張三」 都挨在一起,也會很輕鬆的找到。

上圖 b+ 樹 degree = 4 葉子節點有乙個指標組成線性鍊錶 index 就是從跟節點到最左邊的葉子節點整體掃瞄一遍,此時我們如果使用 index 訪問方法去找 3 的時候,不會像 all 一樣把整個葉子節點都掃瞄一遍,我們可以看到所有的 3 的挨在一起,因為索引是有序的嘛~ 找到第乙個 3 剩下的資料就很容易獲得,那麼 index 效能是很不穩定的,極端情況下跟 all 也是一樣的。

問題總結

雖然 innodb 底層資料都儲存在 b+ 樹裡面,但是這顆 b+ 樹是按照主鍵的 key 的排序規則組織的,所有我們使用非主鍵欄位去查訪問方法只能是 all 是有索引的,但是底層索引樹組織方式不能用吶,所以就會把整張表查一遍(此時就需要建立二級索引優化)index 證明是使用了索引來查詢資料,但是跟上面的栗子一樣,極端情況下與 all 是一樣的。

待續…

mysql主存 輔存 MySQL索引

1.索引的本質 mysql 官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。從中可以得出索引的本質 索引說白了就是一種資料結構 資料庫查詢是資料的重要功能之一,最基本的查詢演算法是 順序查詢 linear search 顯然在資料量很大的時候,效率是很低的。優化的查詢演...

mysql存類 mysql 儲存型別

char 和 varchar 型別 char 型別用於定長字串,並且必須在圓括號內用乙個大小修飾符來定義。這個大小修飾符的範圍從 0 255。比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。char 型別可以使用 binary 修飾符。當用於比較運算時,這個修飾符使 char 以二進位...

關於mysql存當前時間

在mysql中有下面三個函式可以存入我們的當前時間,大家根據需求選擇合適的函式即可。now 函式以 yyyy mm dd hh mm ss 返回當前的日期時間,可以直接存到datetime欄位中。curdate 以 yyyy mm dd 的格式返回今天的日期,可以直接存到date欄位中。curtim...