MySQL 對於大表(千萬級),要怎麼優化

提到優化,先要肯定出現的問題,是存儲引擎選擇問題,仍是sql語句使用問題(如:索引)亦或者是單一存儲服務器對於千萬級別的數據力不從心。
解決方法:
一、根據不一樣業務選用不一樣存儲引擎,雖然通常狀況下都優先選擇InnoDB。mysql

mysql兩種存儲引擎的區別:sql

     MyISAM                Innodb 緩存

事物支持 :   不支持                     支持 服務器

鎖的粒度:    table                      Row 優化

存儲容量:    沒有上限                   64TB spa

哈希索引 :   不支持                     支持 .net

全文索引:    支持                       不支持 日誌

外鍵:        不支持                     支持 blog


二、分析sql語句的影響結果集。查慢查詢日誌,定位慢查詢的sql語句,查看是否有鎖定的sql操做。
三、分庫,分表,分區(慎用分區,每每OLTP操做不適用分區,分區反倒會拖慢原有查詢)
四、利用緩存或NoSql代替現有一些熱點查詢操做,減輕Mysql壓力
分庫:
能夠基於業務邏輯拆分,不一樣業務分佈在不一樣服務器中,減小單一服務器壓力
分表:
垂直分表和水平分表兩種方式
垂直分表:將表中的一些頻繁更新和非頻繁更新的字段分開存放
水平分表,三種分表方式:
均等分表,哈希方式分表,優勢是負載平均分佈,缺點是當容量持續增長時擴榮不方便,須要從新分表,主鍵就很很差處理。
遞增分表,好比每一千萬數據開一個新表,優勢是自適應強,缺點是數據負載不均衡,須要代碼層額外處理。
索引

時間分表,根據不一樣的建立時間分表,適用於OLAP應用。

參照 http://my.oschina.net/ifeixiang/blog/339581

相關文章
相關標籤/搜索