當數據庫數據量漲到一定數量時,性能就成為我們不能不關注的問題,如何優化呢? 常用的方式不外乎那么幾種:
1、分表,即把一個很大的表達數據分到幾個表中,這樣每個表數據都不多。
優點:提高并發量,減小鎖的粒度
缺點:代碼維護成本高,相關sql都需要改動
2、分區,所有的數據還在一個表中,但物理存儲數據根據一定的規則存放在不同的文件中,文件也可以放到另外磁盤上
優點:代碼維護量小,基本不用改動,提高IO吞吐量
缺點:表的并發程度沒有增加
3、拆分業務,這個本質還是分表。
優點:長期支持更好
缺點:代碼邏輯重構,工作量很大
當然,每種情況都有合適的應用場景,需要根據具體業務具體選擇。由于分表和拆分業務和mysql本身關系不大屬于業務層面,我們只說和數據庫關系最緊密的方式:表分區。不過使用表分區有個前提就是你的數據庫必須支持。那么,怎么知道我的數據庫是否支持表分區呢 ? 請執行下面命令

據說5.4一下的版本是另外一個命令,不過我沒有測試
1、創建分區表
如果要使用表的分區優勢,不但要數據庫版本支持分區,關鍵要建分區表,這個表和普通表不一樣,并且必須建表的時候就要指定分區,否則無法把普通表改成分區表。那么,如果創建一個分區表呢? 其他很簡單,請看下面建表語句
| CREATE TABLE `T_part` ( `f_id` INT DEFAULT NULL, `f_name` VARCHAR (20) DEFAULT NULL, PRIMARY KEY (`f_id`)) ENGINE = myisam DEFAULT CHARSET = utf8 PARTITION BY RANGE (f_id)( -----指定分區方式 PARTITION p0 VALUES less THAN (10),-- 分了兩個區 PARTITION p1 VALUES less THAN (20)) |
上面語句建了一個“T_part”表,有兩個字段f_id和f_name,并且根據RANGE方式把表分成兩個區p0、p1,當f_id小于10放入p0分區,當f_id大于0小于20放入分區p1. 那么當f_id大于20的數據放入哪個分區呢? 你猜對了,insert語句會報錯。
看到了吧,創建分區表就這么簡單!當然,你隨時可以添加刪除分區,不過要注意,刪除分區的時候會把當前分區下所有數據都刪除。
新聞熱點
疑難解答