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

一. 使用sql提示

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

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

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([max_elements,[max_memory]]) 優化

      max_elements (默認值 256) 是analyse注意到每列不一樣值的最高數目。analyse使用此參數來檢查是否最優化的列的類型是ENUM類型。spa

      max_memory (默認值 8192) 是analyse在查找全部不一樣值時分配給每列的最大內存數。設計


  例如:下面生產庫中有一個菜單表,字段類型及長度以下:code

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

    下面remark 字段裏面值的最大長度的是30長度, 因此係統建議給出30長度:對象

  2. 經過折分提升表的訪問效率
    折分能夠是垂直拆分和水平拆分,這是一種設計思路,這篇不講。

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

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

相關文章
相關標籤/搜索