MySql 05 筆記 索引

2021-10-07 20:27:49 字數 2122 閱讀 3134

1、select * from t where k between 3 and 5執行幾次搜尋樹?會掃瞄多少行?

>

create

table t(

id int

primary

key,

k int

notnull

default0,

s varchar(16

)not

null

default'',

index k(k)

) engiine

>

insert

into t values

(100,1

,'aa'),

(101,2

,'ab'),

(102,3

,'ac'),

(103,4

,'ad'),

(104,5

'ad'),

(105,7

,'ad'

)

2、執行流程

在 k 索引樹上找到 k=3 的記錄,取得 id = 102;

再到 id 索引樹查到 id=102 對應的 資料;

在 k 索引樹取下乙個值 k=5,取得 id=104;

再回到 id 索引樹查到 id=104 對應的 資料;

在 k 索引樹取下乙個值 k=6,不滿足條件,迴圈結束。

回表:回到主鍵索引樹搜尋的過程

1、select id from t where k between 3 and 5

需要查 id 的值, 而 id 的值已經在 k 索引樹上了,因此可以直接提供查詢結果,不需要回表。

由於覆蓋索引可以減少樹的搜尋次數,顯著提公升查詢效能,所以使用覆蓋索引是乙個常用的

效能優化手段。

1、有乙個高頻請求,要根據市民的身份證號查詢他的姓名則麼做?

建立乙個(身份證號、姓名)的聯合索引

2、索引欄位的維護是有代價的,在建立冗餘索引來支援覆蓋索引時就需要權衡考慮。

1、b+ 樹索引結構,可以利用索引的「最左字首」,來定位記錄。

2、在建立聯合索引的時候,如何安排 索引內的字段順序。

第一原則是,如果通過調整順序,可以少維護乙個索引,那麼這個順序是需要優先考慮採用的。索引的復用能力

第二原則 考慮索引的空間使用

3、例子 一建立了乙個聯合索引 (a,b)

查詢既有聯合查詢,又有基於a、b各自的查詢,無法使用(a,b)這個聯合索引。這時就需要維護單個索引。

1、mysql 5.6 引入的索引下推優化(index condition pushdown), 可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數。

2、例子 檢索出表中「名 字第乙個字是張,而且年齡是 10 歲的所有男孩」 聯合索引是(name,age)

語句

>

select

*from tuser where name like

'張%'

and age 10

and *** =

1

id

name

***age1張1

1302張2

1103張3

0204張4

010

innodb 在 (name,age)索引內部就判斷了age是否等於10,對於不等於10的記錄,直接判斷並跳過。減少了回表的次數。上表只需兩次回表 內部判斷會丟棄年齡為 30 和 20 的

mysql 05索引 個人筆記

1檢視表的所有索引 show index from tablename g 2普通索引的建立 2.1 語法create index index name on table name field name,asc desc create index i dogname on dog dogname a...

MySql 04 筆記 索引

1 為什麼需要索引?索引的出現是為了提高資料查詢的效率 1 雜湊表 雜湊表是一種以鍵 值 key value 儲存資料的結構,只要輸入待查詢的值即key,就可以找到其對應的值即 value。雜湊的思路 把值放在陣列裡,用乙個雜湊函式把key換算成乙個確定的位置,然後把value放在陣列的這個位置 雜...

MySQL 05 資料型別

型別 大小 位元組 用途tinyint 1小整數值 smallint 2大整數值 mediumint 3大整數值 int4 大整數值 bigint 8極大整數值 float 4單精度浮點數值 double 8雙精度浮點數值 decimal decimal m,d m d?m 2 d 2 小數值型別 ...