我正在尝试使用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
的二进制代码字段。
我的设计是好主意还是坏主意?
我可以在标签位集字段上使用索引,这样我可以加快查找速度吗?
如果MySQL不能做#2,那么我最好的选择(除了NoSQL)
提前致谢!
答案 0 :(得分:1)
不,多对多关系所需的两个连接并不会对大数据产生影响,这是一个基本的设计模式,而MySQL的加入速度非常快。如果有超过32个不同的标签(或64,如果你使用BigInt
数据类型),你的设计会中断 - 你能发现原因吗?此外,通常最好先担心实施应用程序,并在以后出现问题时关注性能。