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 協議》,轉載必須註明作者和本文連結