首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 分區表效能實測(二):建立分區表、測試資料灌入與管理簡化

     編輯:MySQL 資料庫相關知識

分區帶來的管理簡化

  • DBA 可針對特定分區刪除/歸檔資料,不影響其餘分區完整性。
  • 分區由 MySQL 系統自動維護,無需手動切分與管理。

測試環境

  • 硬體:Dell Optiplex, Pentium 4 3.0GHz, 1GB RAM
  • OS:Fedora Core 4
  • DB:MySQL 5.1.6 alpha

建立 RANGE 分區表

CREATE TABLE part_tab (
    c1 INT DEFAULT NULL,
    c2 VARCHAR(30) DEFAULT NULL,
    c3 DATE DEFAULT NULL
) ENGINE=MyISAM
PARTITION BY RANGE (YEAR(c3)) (
    PARTITION p0 VALUES LESS THAN (1995),
    PARTITION p1 VALUES LESS THAN (1996),
    PARTITION p2 VALUES LESS THAN (1997),
    PARTITION p3 VALUES LESS THAN (1998),
    PARTITION p4 VALUES LESS THAN (1999),
    PARTITION p5 VALUES LESS THAN (2000),
    PARTITION p6 VALUES LESS THAN (2001),
    PARTITION p7 VALUES LESS THAN (2002),
    PARTITION p8 VALUES LESS THAN (2003),
    PARTITION p9 VALUES LESS THAN (2004),
    PARTITION p10 VALUES LESS THAN (2010),
    PARTITION p11 VALUES LESS THAN MAXVALUE
);

關鍵點:最後一個分區使用 MAXVALUE 兜底,確保所有資料皆有歸屬,避免寫入失敗。

建立對照用非分區表

CREATE TABLE no_part_tab (
    c1 INT(11) DEFAULT NULL,
    c2 VARCHAR(30) DEFAULT NULL,
    c3 DATE DEFAULT NULL
) ENGINE=MyISAM;

預存程序灌入 800 萬筆測試資料

DELIMITER //
CREATE PROCEDURE load_part_tab()
BEGIN
    DECLARE v INT DEFAULT 0;
    WHILE v < 8000000 DO
        INSERT INTO part_tab 
        VALUES (v, 'testing partitions', ADDDATE('1995-01-01', (RAND(v)*36520) MOD 3652));
        SET v = v + 1;
    END WHILE;
END//
DELIMITER ;

CALL load_part_tab();  -- 耗時約 8 分 17 秒

資料平均分佈於各年度分區,為後續效能測試奠定基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved