MySql系列 (二) MySql索引

2022-09-18 22:48:16 字數 1312 閱讀 9267

索引可以理解為字典的音序表一樣,可以根據它來查詢匹配的資料項。

實際上索引是一種對資料表的一列或多列字段進行排序的資料結構,常見的索引資料結構就是b+樹(什麼是b+樹?)。

索引主要是啟提高資料查詢的效率,幫助我們快速的在大量資料中定位到我們要找的資料。

簡單的例子:下面這張表有4個字段,主鍵id、會員id、優惠券模板id、優惠券code,整張表大概有72萬條左右的資料,大體資料分布: 乙個優惠券模板id對應100到10000條優惠券code,優惠券id對應的code是順序分布的(這種資料的分布結構可以減少磁碟操作的耗時)。

idmember_id

coupon_template_id

ticket_code

1100000008

18049b9k

2100000008

19059g9k

3100000001

22059g8d

4000000010

30078g8d

5100000012

80078g6d

現在表中只有乙個主鍵id,別的沒有建索引:

select ticket.ticket_codefrom mkt_coupon_deliver_task_ticket ticket where ticket.coupon_template_id = #

查出100條code耗時:0.354秒

給coupon_template_id欄位建乙個普通索引:

查出100條code耗時:0.057秒

簡單來說,通過索引我們能減少所需要的掃瞄的資料條數,減少耗時。

新增索引:

刪除索引:

索引還可以分為:唯一索引、普通索引、全文索引。一般命名規則就是唯一加上'uk'、普通加上'idx'來做索引的命名開頭。

乙個索引如果包含多個字段,叫做組合索引,組合索引生效根據最左字首原則。

現在的程度感覺還講不清楚,留後面補充...

回表:當我們的sql使用到索引的時候,會先根據索引字段查詢出索引樹滿足條件的葉子節點(索引樹(非主鍵)的葉子節點包含索引欄位和主鍵id),查詢到目標資料的id後,還需要去主鍵id的索引樹(索引樹(主鍵)的葉子節點包含一行的所有資料),獲取select後面的其餘字段。

索引覆蓋:

索引覆蓋是不會有回表這個操作,當你要select的字段都在索引樹能找到的時候,是不必再回到主鍵索引樹查詢其他欄位的,根據這個特性,可以適當的建立組合索引。

空間的占用增加:索引樹的資料結構肯定要花費多餘的空間來進行儲存。

刪除、修改操作的耗時增加:索引雖然大大減少了查詢的耗時,但是修改等操作要同時修改索引樹,會增加耗時。

mysql 索引 二 MySQL學習之索引(二)

高效能的索引策略 isolating the column 孤立列就是說,這一列不能在表達示中或在乙個函式裡面,如 mysql select actor id from actor where actor id 1 5 錯誤 再如 mysql select where to days current...

mysql 索引 二 2 MySQL索引

一 索引介紹 索引是一種資料結構,用於幫助我們在大量資料中快速定位到我們想要查詢的資料。索引在mysql中也叫做 鍵 是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵,尤其是當表中的資料量越來越大時,索引對於效能的影響愈發重要。索引優化應該是對查詢效能優化最有效的手段了。索引能夠...

Mysql系列之索引篇

為了提高資料庫的查詢效率,然後我們會給一些字段增加索引,但是大家有沒有考慮過,索引是什麼?我們為什麼要用索引?增加了索引就一定快嗎?如何實現按照索引查詢呢?索引的資料結構有哪些呢?它分為哪幾類呢?大家別懵,下面就深入去探個究竟吧!索引是為了加快對錶中資料行的檢索而建立的一種分散儲存的資料結構 通俗來...