1 . 預(yù)發(fā)跑 SQL explain
2. 排除 緩存 SQL nocache
3. 看一下行數(shù)對不對 不對可以用analyze table t 矯正
4. 添加索引 , 索引不一定是最優(yōu)的 force index 強制走 索引, 不建議使用
5. 存在回表的情況
6. 覆蓋索引避免回表, 不要* ,主鍵 索引
7. 聯(lián)合索引,不能無限制建 ,高頻 場景
8. 最左前原則 按照索引定義的字段順序?qū)憇ql
9 . 合理安排聯(lián)合索引的順序
10. 5.6版本之后, 索引下推, 減少回表次數(shù)
11. 給字符串 加索引
前綴索引
倒序存儲
Hash
12 . 數(shù)據(jù)庫的fush 的時機
1.redo log 滿啦, 修改checkpoint flush 到磁盤
2. 系統(tǒng) 內(nèi)存不足淘汰數(shù)據(jù)頁
buffer pool 要知道磁盤的IO能力, 設(shè)置 innodb_io_capacty 設(shè)置磁盤的IO PS fio測試
innodb_io_capacity 設(shè)置低了, 會讓innoDB 錯誤估算系統(tǒng)能力,導(dǎo)致臟頁累積
3. 系統(tǒng)空閑的時候,找間隙刷臟頁
4. mysql正常關(guān)閉,會把內(nèi)存臟頁 flush到磁盤
13 .inndb刷磁盤速度
1.臟頁比例
2.redolog 寫盤的速度
3.innodb_fulsh_nieighbors 機械磁盤的隨機io不太行 減少隨機io性能大幅提升 設(shè)置為 1最好
4.現(xiàn)在都是ssd了, 設(shè)置為0 就好了, 8.0 之后默認為 0
14. 索引字段不要做函數(shù)操作,會破壞索引值的有序性,優(yōu)化器會放棄走樹結(jié)構(gòu) ,如果觸發(fā)隱式轉(zhuǎn)換 那也會走cast函數(shù) 會放棄走索引
15 字符集 不同可能走不上索引, convert 也是函數(shù)走不上
pps:
索引 選擇, 1.普通索引,唯一索引,覆蓋索引,最左前綴索引
MVCC
1.版本鏈 在聚集索引中,要兩個隱藏列 trx_id roll_pointer
2.讀未提交,(直接讀取最新版本)
3.序列化 (加鎖)
- Read View (讀已提交, 每次讀取生成一個)(可重復(fù)度, 每一次生成一個)