代码之家  ›  专栏  ›  技术社区  ›  John M

如何基于char列划分MySQL表?

  •  7
  • John M  · 技术社区  · 14 年前

    在查看MySQL 5.1文档之后,似乎只能使用整数类型。

    是这样吗?或者我可以用一些函数把字符转换成整数吗?

    2 回复  |  直到 12 年前
        1
  •  16
  •   Daniel Vassallo    14 年前

    Source ). 你只能使用 few partitioning functions

    CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
       ENGINE=INNODB
       PARTITION BY HASH( MONTH(tr_date) )
       PARTITIONS 6;
    

    key partitioning

    CREATE TABLE k1 (
       id CHAR(3) NOT NULL PRIMARY KEY,
       value int
    )
    PARTITION BY KEY(id)
    PARTITIONS 10;
    

    另一方面,在MySQL 5.5中,您可以使用 range column partitioning list column partitioning 在各种各样的数据类型上,包括基于字符的列。

    CREATE TABLE expenses (
       expense_date DATE NOT NULL,
       category VARCHAR(30),
       amount DECIMAL (10,3)
    );
    
    ALTER TABLE expenses
    PARTITION BY LIST COLUMNS (category)
    (
       PARTITION p01 VALUES IN ('lodging', 'food'),
       PARTITION p02 VALUES IN ('flights', 'ground transportation'),
       PARTITION p03 VALUES IN ('leisure', 'customer entertainment'),
       PARTITION p04 VALUES IN ('communications'),
       PARTITION p05 VALUES IN ('fees')
    );
    

    范围列示例:

    CREATE TABLE range_test (
       code CHAR(3),
       value INT
    )
    PARTITION BY RANGE COLUMNS(code) (
       PARTITION p0 VALUES LESS THAN ('MMM'),
       PARTITION p1 VALUES LESS THAN ('ZZZ')
    );
    

    进一步阅读:

        2
  •  0
  •   Rick James diyism    9 年前

    关于分区的其他评论: http://mysql.rjweb.org/doc.php/partitionmaint

    一些 在其他答案中提到的限制中,分区很少比索引更好。