1. 程式人生 > >mysql 開發進階篇系列 5 SQL 優化

mysql 開發進階篇系列 5 SQL 優化

其它 目的 block 垂直拆分 例如 info 分析 設計 plain

一. 使用sql提示

sql 提示(sql hint)是優化數據庫的一個重要手段, 是在sql語句中加入一些人為的提示來達到優化操作的目的。

  1.1 use index
    在查詢語句中表名的後面,添加use index 強制mysql使用該索引,不考慮其它索引。

EXPLAIN SELECT * FROM city USE INDEX(ix1) WHERE city_id=1;

  1.2 ignore index
    在查詢語句中表名的後面,添加ignore index,使用mysql忽視一個或者多個索引。

EXPLAIN SELECT
* FROM city IGNORE INDEX(ix1) WHERE city_id=14;

  1.3 force index
    在查詢語句中表名的後面,添加force index,當mysql不走索引時,強制走索引。

-- 某些情況下,有索引但mysql不走索引,強制使用
EXPLAIN SELECT * FROM city FORCE INDEX (PRIMARY) WHERE  city_id>0;

二 .優化數據庫對象

  1. 優化表的數據類型
    在mysql中,可以使用函數procedure analyse()對當前應用的表進行分析。對表列中的數據類型給出合理的改進建議,用戶可以根據實際情況來考慮。
  例如:下面生產庫中有一個菜單表,字段類型及長度如下:

技術分享圖片

 -- 使用procedure analyse()分析
SELECT * FROM Adm_Menu PROCEDURE ANALYSE(16,256);

  下面remark 字段裏面值的最大長度的是30長度, 所以系統建議給出30長度:

技術分享圖片

  2. 通過折分提高表的訪問效率
    折分可以是垂直拆分和水平拆分,這是一種設計思路,這篇不講。

  3. 逆規範化
    逆規範化也叫提高表的冗余,有利於提高查詢性能。這是一種設計思路,這篇不講。

  4. 使用中間表提高統計查詢速度
    比如有一個大表記錄了客戶的每天消費記錄,需要按月統計總消費金額, 可以放入到中間表,減輕大表的頻繁查詢. 這是一種設計思路,這篇不講。

mysql 開發進階篇系列 5 SQL 優化