MySQL優化總結--單表優化

★【單表優化】思路

【表設計】開始,字段儘可能精確,避免過多字段,避免null。數據庫

【存儲引擎】選擇好。工具

【索引】設計好。優化

【查詢優化】,between和exists優於in的使用;union all 比union的效率高。spa

【表分區】的使用。設計

上面屬於單表優化的思路。若是還不能知足需求,就只能選擇對數據庫層級進行操做了(好比垂直拆分和水平拆分)。日誌

表設計

可預知狀況下字段儘可能準確

儘可能使用TINYINT、SMALLINT、MEDIUM_INT做爲整數類型而非INT,若是非負則加上UNSIGNED索引

VARCHAR的長度只分配真正須要的空間字符串

使用枚舉或整數代替字符串類型io

儘可能使用TIMESTAMP而非DATETIME

單表不要有太多字段,建議在20之內,去掉無用的字段

避免使用NULL字段,很難查詢優化且佔用額外索引空間

存儲引擎--MyISAM和InnoDB

索引

索引列區分度要高

聯合索引的區分度要看幾個索引的聯合。效率

字符型索引能夠使用前綴索引(考慮區分度要高)。

索引列不能參與計算

會失效。

創建聯合索引,並注意聯合索引中各個字段的順序

索引就是用空間換取時間,要佔用存儲空間的。

查詢優化

避免使用 select *

in(1,2,3,4) 能夠用 between 1 and 4來代替

儘可能使用 exists 而非 in

union all 比 union 效率要高,並且儘早的union

表分區

按月進行表分區實踐。

系統級工具

使用explain

rows是核心指標,絕大部分rows小的語句執行必定很快。因此優化語句基本上都是在優化rows。

開啓慢查詢日誌

相關文章
相關標籤/搜索