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