mysql查詢優化總結
阿新 • • 發佈:2020-11-08
- number型別的索引列查詢條件為String時不會用到索引,反之一樣.
- 遵循最左字首的原則下,能用聯合索引就不要建立多個單列索引,聯合索引在多列索引條件都用到時過濾性更強.(當建立a,b聯合索引時,即時你的查詢是 select xx from xx where b = xx and a = xx, 也會用到索引,mysql在解析完sql後會通過優化器優化你的sql.mysql一個表最多建立16個索引)
- 複雜的sql優化時,可以分步拆分子查詢,explain子查詢,著重優化耗時較長的子查詢,目標是減少rows,走到索引(mysql主鍵聚簇索引效率最快,葉子節點儲存整行資料,二級索引即普通列上的索引葉子節點儲存的是主鍵的值,不是儲存行指標!需要再到聚簇索引中查詢對應的行資料,即回表.可通過覆蓋索引防止回表查詢,覆蓋索引就是在查詢結果的列上建立聯合索引).
- 分頁查詢優化:mysql的 limit m,n 會掃描m + n行資料,丟掉m前行資料,當m較大時會造成查詢效能嚴重下降,最好的解決方法是通過自增主鍵篩選當前頁資料.
假設table student(id,name,sex,desc,phone,addr) sql: select ... from student where ... limit pageSize(curPage-1), pageSize
(1) select ... from student where id > pageSize(curPage-1) order by id limit pageSize --效能最好的優化