mysql 创建带有索引范围的分区

标签 mysql

假设我有一张汽车 table 。该表有一个索引列“brand”(int)。 目前我有 1-100 个品牌 ID,但假设品牌经常被添加。

我想按品牌索引列创建一个分区,每个分区将构成具有特定品牌的所有汽车,如果我向具有新brand_id的汽车插入新行,它也应该有一个分区(没有完全弄清楚分区是如何工作的)。 那么我该如何为这个现有的表做呢? 为什么每次我在网上看到分区代码时,似乎您应该像硬编码一样定义范围。

谢谢

最佳答案

不确定是否可以按照您想要的方式完成。

如果您想要均匀分布数据,请使用HASH分区并设置一个计数以拥有您想要的多个分区。这可能是更好的选择,因为您可以拥有一个只有一辆车的品牌?或者也许不是?

CREATE TABLE cars (
    id INT NOT NULL,
    brand_id INT
)
PARTITION BY HASH(brand_id)
PARTITIONS 10;

这将根据brand_id给出10个大小均匀的分区

我知道如何做,即使每个 id 可以有一个新分区。当您通过 RANGE 创建分区时,您可以定义每个分区的范围,如下所示。

CREATE TABLE cars (
        id INT NOT NULL,
        brand_id INT

PARTITION BY RANGE (brand_id) (
    PARTITION p0 VALUES LESS THAN (10),
    PARTITION p1 VALUES LESS THAN (25),
    PARTITION p2 VALUES LESS THAN (50),
    PARTITION p3 VALUES LESS THAN (100),
    PARTITION p4 VALUES LESS THAN MAXVALUE
);

这将根据分区范围设置提供 5 个不同大小的分区。

引用:

https://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html https://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html

关于mysql 创建带有索引范围的分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229445/

相关文章:

PHP:选择一年中几个月的总和数据

mysql - 在两列上联接表

sql - 在 SQL 或 MySQL 中不使用 JOIN 关键字的连接是否有问题?

php - 如何在 zend 框架中同时使用 COUNT 和 DISTINCT?

php - 为什么我无法向mysql服务器插入数据?

mysql - 如何按月编写单个项目的销售额查询

mysql - 设置变量等于MySQL中的列

php - 如何在类中使用PDO连接工作

php - php mysql 标题中的列名

mysql - 登录 MySQL 后运行系统命令