1

我正在试验 mysql 分区(拆分表以帮助它更好地扩展),但我遇到了表上的键问题。首先,我使用的是 python 的线程注释模块......这是架构

+-----------------+------------------+------+-----+---------+-------+
| Field           | Type             | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+-------+
| content_type_id | int(11)          | NO   | MUL | NULL    |       |
| object_id       | int(10) unsigned | NO   |     | NULL    |       |
| parent_id       | int(11)          | YES  | MUL | NULL    |       |
| user_id         | int(11)          | NO   | MUL | NULL    |       |
| date_submitted  | datetime         | NO   |     | NULL    |       |
| date_modified   | datetime         | NO   |     | NULL    |       |
| date_approved   | datetime         | YES  |     | NULL    |       |
| comment         | longtext         | NO   |     | NULL    |       |
| markup          | int(11)          | YES  |     | NULL    |       |
| is_public       | tinyint(1)       | NO   |     | NULL    |       |
| is_approved     | tinyint(1)       | NO   |     | NULL    |       |
| ip_address      | char(15)         | YES  |     | NULL    |       |
| id              | int(11)          | YES  |     | NULL    |       |
+-----------------+------------------+------+-----+---------+-------+

请注意,我已通过删除 id col(默认情况下为主要)来修改此数据库,然后重新添加它。

本质上,我希望将 id 和 content_type_id 作为我的主键。我也希望 id 自动递增。这可能吗。

第二个问题。由于我只是在学习 mysql 分区,所以我想知道我的分区逻辑是否合理。有 67 种不同的 content_types,其中一些(可能全部)内容类型允许对它们进行评论。我的计划是根据正在评论的对象类型进行分区。比如图片会被很多评论,所以我把任何与图片有关的内容类型都放在一个分区中,而另一种可以评论的内容类型是“博客条目”,所以有一个单独的分区,并且依此类推。随着负载的增长,这将允许我将这些分区分散到专用机器上。到目前为止,我对这个概念的理解如何?

非常感谢!

4

1 回答 1

1

由于 id 将自动递增,因此它可以单独作为主键。将 content_type 添加到主键不会获得任何关于键的唯一性的信息。

如果要为 2 列添加索引以提高性能,请向具有 2 列的表添加备用唯一索引,而不是尝试将它们都添加到主键。但是,请注意,在 2 列上强制执行唯一性将是一种浪费,因为 id 本身已经保证是唯一的,因此如果需要,常规索引会更有意义。

于 2011-05-31T05:11:25.317 回答