1

我正在尝试使用 MySQL 为我的项目设计一个类似标签的结构。

在阅读了这个http://forge.mysql.com/wiki/TagSchema之后,我感到非常失望,因为 m2m 表设计需要如此多join的性能,这肯定会影响大数据。

我想到的是一个标签表,其中每个标签都有一个name和一个id

然后在我要标记的项目表上,每个项目都有一个名为 的列tag,每个标记将其位索引标记为 1,否则位字段为 0。

例如

table: tag

id   name
1    tag1
2    tag2
3    tag3



table: item

id      name    tag (in binary)     tag (in array)
 1      item1   00000001            [tag1]
 2      item2   00000100            [tag3]
 3      item3   00000110            [tag2, tag3]

所以如果我想item用某些标签查找一个,我只需要&带有想要的标签的二进制标签字段id

  1. 我的设计是好主意还是坏主意?

  2. 我可以在标记位集字段上使用索引,以便加快查找速度吗?

  3. 如果 MySQL 不能做 #2,我最好的选择是什么(除了 NoSQL)

提前致谢!

4

1 回答 1

1

不,多对多关系所需的两个连接不会吸收大数据,这是一种基本的设计模式,MySQL 的连接速度非常快。如果有超过 32 个不同的标签(或 64 个,如果您使用BigInt数据类型),您的设计就会中断 - 您能找出原因吗?此外,通常最好先考虑实现您的应用程序,然后当它成为问题时再关注性能。

于 2012-07-26T11:37:36.150 回答