首頁>Club>
2020-07-12:什麼是索引回表,如何避免?
22
回覆列表
  • 1 # 科技小館

    首先,資料庫中的索引是什麼?

    引用高效能mysql中的一句話:索引(mysql也叫作鍵(key))是儲存引擎用於快速找到記錄的一種資料結構。

    這句話有兩個點:儲存引擎和資料結構。首先理解索引是在儲存引擎層而非伺服器層實現。而mysql分為多種儲存引擎,這裡我們只探討myisam 和InnoDB。兩者都支援B+Tree(一種資料結構)索引。

    如果說這個理解不了,還有一個通俗易懂的方法。書都有目錄,快速找到自己需要內容的方法,就是檢視目錄,索引就是資料庫表資料的目錄。

    迴歸問題:索引引發的回表問題。索引為啥會引發回表?

    下面我們來假設一種情況,一個表有三個欄位 ID ,name ,age,將ID設定成主鍵索引,name設成輔助索引。

    然後來看一下下面的sql:

    1.select * from t where;

    2.select * from t where name="張三";

    兩個很簡單的Sql。

    第一個sql不用說,直接透過主鍵索引,從樹上直接可以得到結果。

    第二個sql:首先name,mysql並不能得到所有列的資訊(也就是*),只能得到主鍵ID,然後會根據ID在進行二次查詢,這就引發了回表問題。這就是為啥不能使用*的原因。

    那麼怎麼解決呢?

    第一不要寫*。

    第二利用組合索引,也就是說你根據業務實際需要,將需要的欄位形成組合索引。

  • 中秋節和大豐收的關聯?
  • 苦苣根發紅是怎麼回事?能吃嗎?