这可能是一个问题,我失去了更多时间去思考如何做正确的事情,并以最佳优化方式进行思考。制作“hashtag”系统的最佳方式
我有一个表“内容”,并且需要添加选项以将多个“hashtags”或“tags”或“关键字”关联到内容,例如,像“tomato potatos with tomato sauce”这样的内容具有“钥匙”:“土豆”,“番茄酱”和“油炸”。
而当我通过一个词搜索,例如“马铃薯”,我需要显示其中的内容标记这个词。
问题是,什么是最好的结构来做到这一点,思考结果的速度,因为内容表是MyISAM mith超过30 Millon行。
我想在这个:
让2个表,“contents_hashtags” (id(INT11), content_id(INT11), hashtag_id(INT11))
和“井号标签” (id(INT11), hashtag(VARCHAR(40)))
2个InnoDB的
当用户创建/修改表的内容表,我在搜索hashtags表并获取ID,如果不存在hashtag,则在表中创建hashtag,如果存在,则获取ID,使用此ID在表中创建插入contents_hashtas asociating contents < -contents_hashtas-> hashtahs
在搜索中,使JOINS(LEFT/RIGHT/INNER dude ..)并通过LIKE进行搜索?确切(hashtag =“XXX”)或全文搜索?
此方法正确/快速吗?我不知道如何与一个大的行数和大流量运行这个..
什么方法快速搜索? 3桌子还是2桌子的方法? 3表中的方法是JOINs的直接关系,但在2表方法中,hashtag对于内容是“重复的”(因为id + hashtag无法重复)。如果我搜索例子:content.active = 1 AND(contents.name ='xxx'OR(Contags.hashtag ='XXX'and Content.id = Contags。content_id)) – Zenth 2012-02-15 09:04:18
Upvoted for“或者,将Hashtags Name和ContentId设置为唯一键”。不需要3桌2就足够了。 – DeepBlue 2017-01-10 23:28:21