代码之家  ›  专栏  ›  技术社区  ›  Mark P.

MySQL注释掉alter table partition语句

  •  0
  • Mark P.  · 技术社区  · 6 年前

    我有一个表,现在是空的,但将加载数以亿计的记录。在执行此加载之前,我希望在表上创建一些分区,以提高查询性能并在以后启用更好的删除(只需截断整个分区)。

    ALTER TABLE `TABLE_NAME` 
     PARTITION BY RANGE (YEAR(DATE_FIELD)) (
     PARTITION y1 VALUES LESS THAN (2017),
     PARTITION y2 VALUES LESS THAN (2018),
     PARTITION y3 VALUES LESS THAN (2019),
     PARTITION ymax VALUES LESS THAN (2050)
     );
    

    当我在MySQL工作台中运行代码时,它执行得很好,没有任何错误。检查表时,分区不会显示在列表中: enter image description here

    在自动生成的DDL中,分区被注释掉:

    CREATE TABLE `TABLE_NAME` (
      `field1` decimal(5,2) DEFAULT NULL,
      `field2` decimal(5,2) DEFAULT NULL,
      `DATE_FIELD` date NOT NULL,
      `field3` float DEFAULT NULL,
      `field4` float DEFAULT NULL,
      `field5` datetime DEFAULT NULL,
      `field6` varchar(50) NOT NULL,
      PRIMARY KEY (`field6`,`DATE_FIELD`),
      KEY `dd_IDX1` (`DATE_FIELD`,`field1`,`field2`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    /*!50100 PARTITION BY RANGE (year(`DATE_FIELD`))
    (PARTITION y1 VALUES LESS THAN (2017) ENGINE = InnoDB,
     PARTITION y2 VALUES LESS THAN (2018) ENGINE = InnoDB,
     PARTITION y3 VALUES LESS THAN (2019) ENGINE = InnoDB,
     PARTITION ymax VALUES LESS THAN (2050) ENGINE = InnoDB) */
    

    2 回复  |  直到 6 年前
        1
  •  2
  •   Rick James diyism    6 年前

    /*!50100 ... */

    所以,如果您在5.0服务器上运行这个,它就不会有分区(5.0没有 PARTITIONs 但5.1及更高版本将实现。

    您将在中看到这方面的变化 mysqldump 输出。

    PARTITIONing . 你希望什么?

        2
  •  0
  •   Mark P.    6 年前

    在进一步研究之后,我将指出这样一个事实:当单击tableinspector到GUI中的一个bug时,分区并没有显示在partitions屏幕中。当您选择altertable并查看分区选项卡时,它们会显示在那里。此外,在检查 PARTITIONS 分区的信息表也显示在那里。请参阅Rick James answer以了解注释语法。