1. 程式人生 > 資料庫 >mysql查詢優化總結

mysql查詢優化總結

  1. number型別的索引列查詢條件為String時不會用到索引,反之一樣.
  2. 遵循最左字首的原則下,能用聯合索引就不要建立多個單列索引,聯合索引在多列索引條件都用到時過濾性更強.(當建立a,b聯合索引時,即時你的查詢是 select xx from xx where b = xx and a = xx, 也會用到索引,mysql在解析完sql後會通過優化器優化你的sql.mysql一個表最多建立16個索引)
  3. 複雜的sql優化時,可以分步拆分子查詢,explain子查詢,著重優化耗時較長的子查詢,目標是減少rows,走到索引(mysql主鍵聚簇索引效率最快,葉子節點儲存整行資料,二級索引即普通列上的索引葉子節點儲存的是主鍵的值,不是儲存行指標!需要再到聚簇索引中查詢對應的行資料,即回表.可通過覆蓋索引防止回表查詢,覆蓋索引就是在查詢結果的列上建立聯合索引).
  4. 分頁查詢優化: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 --效能最好的優化
    (2) select ... from student s left join (select id from student limit pageSize*(curPage-1),pageSize) s1 on s.id = s1.id limit pageSize -- 效能較第一種略差,利用主鍵索引,可以不需要嚴格遞增主鍵.