MySQL对于不同的产品类型有一个或多个表?

时间:2014-07-27 10:37:49

标签: mysql

我们说我在网站上销售游戏,歌曲或专辑。仅在性能方面,最好只有一个表格具有字段'类型'或每种类型一张桌子?字段几乎相同。

感谢。

2 个答案:

答案 0 :(得分:1)

这完全取决于您期望拥有多少条记录,以及您打算运行哪种类型的查询。如果您要查看每种类型的数百万,那么将它们拆分为单独的表可能会更高效,但如果向正确的列添加索引,那么拥有一个表就绝对没问题。< / p>

为简单起见,单个表很好 - 您只需使用type列过滤所需的项目类型即可。只要确保你索引该列,否则一旦你开始获得大量记录,它在性能方面会非常糟糕。但是,如果不知道你认为从长远来看会有多少项目,那么估计它是一件非常困难的事情。

也许拥有更多DBA知识的人可以在这里说话,但我会说

  • 如果您想要绝对最佳的表现 - 分开表格
  • 如果你不介意可能是几毫秒的差异 - 单桌。

正如@Sander Visser所指出的,如果您希望能够通过所有待售物品进行全文搜索,那么单个表格会更好。尝试在3个表上执行此操作会有点棘手,因为您最有可能最终得到3个单独的查询(或联合查询),这可能比单个表搜索慢。

鉴于您正在考虑正常操作的1表和3表实现之间的非常小的时间差异,我建议使用单表方法。

答案 1 :(得分:0)

实际上,如果您的担忧是性能与简单,您不必选择。您可以使用两个分区的优势:

  • 使用单个表进行更简单的查询
  • 使用您的(枚举)类型字段对其进行分区,以便特定类型的查询仅搜索相关数据。

这是MySQL manual

  

由于满足给定WHERE子句的数据只能存储在一个或多个分区上,因此可以大大优化某些查询,这会自动从搜索中排除任何剩余的分区。

在您的情况下,如果您有3种类型,则可以按如下方式定义分区:

CREATE TABLE items
(
    ...
    type INT NOT NULL
)
PARTITION BY HASH( type ) PARTITIONS 3;

参见示例here