MySQL 學習之索引篇和查詢

caoziang發表於2020-10-27

1、如果查詢中的列不是獨立的,則mysql就不會使用索引。“獨立的列”是指索引列不能是表示式的一部分,也不能是函式的引數
2、對於BLOB、TEXT或者很長的VARCHAR型別的列,必須使用字首索引,因為mysql不允許索引這些列的完整長度
3、字首索引是一種能使索引更小更快的有效辦法,但mysql無法使用字首索引做OREDR BY和GROUP BY,也無法使用其做覆蓋掃描
4、選擇索引的列順序的法則:將選擇性最高的列放到索引的最前面
5、對於mysql而言,最簡單的衡量查詢開銷的三個指標如下:

  • 響應時間
  • 掃描的行數
  • 返回的行數

6、mysql的執行過程:

  • 客戶端傳送一條查詢給伺服器
  • 伺服器先檢查查詢快取,如果命中了快取,則立刻返回儲存在快取中的結果,否則進入下一個階段
  • 伺服器端進行sql解析、預處理、再由優化器生成對應的執行計劃
  • mysql根據優化器生成的執行計劃,呼叫儲存引擎的API來執行查詢
  • 將結果返回給客戶端

7、mysql的查詢狀態

  • Sleep:執行緒正在等待客戶端傳送新的請求
  • Query:執行緒正在執行查詢或者正在將結果傳送給客戶端
  • Locked:在mysql伺服器層,該執行緒正在等待表鎖
  • Analyzing and statistics : 執行緒正收集儲存引擎的統計資訊,並生成查詢的執行計劃
  • Copying to tmp table [on disk]:
  • 執行緒正在查詢結果,並且將其結果都複製到一個臨時表單中,如果有on disk標記,那表示mysql正在將一個記憶體臨時表放到磁碟上
  • Sorting result: 執行緒正在對結果集進行排序
  • sending data : 這表示多種情況:執行緒可能是子啊多個狀態之間傳遞資料,或者在生成結果集,或者在向客戶端返回資料

8、

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章