国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL優化之分區表

2024-07-24 12:44:42
字體:
來源:轉載
供稿:網友

當數據庫數據量漲到一定數量時,性能就成為我們不能不關注的問題,如何優化呢? 常用的方式不外乎那么幾種:

  1、分表,即把一個很大的表達數據分到幾個表中,這樣每個表數據都不多。

    優點:提高并發量,減小鎖的粒度
    缺點:代碼維護成本高,相關sql都需要改動

  2、分區,所有的數據還在一個表中,但物理存儲數據根據一定的規則存放在不同的文件中,文件也可以放到另外磁盤上

    優點:代碼維護量小,基本不用改動,提高IO吞吐量
    缺點:表的并發程度沒有增加

  3、拆分業務,這個本質還是分表。

    優點:長期支持更好
    缺點:代碼邏輯重構,工作量很大

  當然,每種情況都有合適的應用場景,需要根據具體業務具體選擇。由于分表和拆分業務和mysql本身關系不大屬于業務層面,我們只說和數據庫關系最緊密的方式:表分區。不過使用表分區有個前提就是你的數據庫必須支持。那么,怎么知道我的數據庫是否支持表分區呢 ? 請執行下面命令  

復制代碼 代碼如下:

show plugins;  ---在mysql控制臺中執行

據說5.4一下的版本是另外一個命令,不過我沒有測試

復制代碼 代碼如下:

 show variables like '%part%';

   數據庫的表分區一般有兩種方式:縱向和橫向。縱向就是把表中不同字段分到不同數據文件中。橫向是把表中前一部分數據放到一個文件中,另一部分數據放到一個文件中。mysql只支持后后一種方式,橫向拆分。

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語句會報錯。

  看到了吧,創建分區表就這么簡單!當然,你隨時可以添加刪除分區,不過要注意,刪除分區的時候會把當前分區下所有數據都刪除。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰县| 茂名市| 沙河市| 濉溪县| 石柱| 吉安县| 彭州市| 北宁市| 蒙山县| 化隆| 海门市| 同江市| 新营市| 长沙市| 大悟县| 象山县| 桑日县| 嘉善县| 湟中县| 汝城县| 和田市| 万安县| 盐池县| 黎平县| 商河县| 天柱县| 商南县| 静乐县| 北票市| 专栏| 道真| 安西县| 德庆县| 阜新市| 庆城县| 海兴县| 临江市| 垣曲县| 含山县| 漯河市| 红河县|