我有一个拥有大约30,000个成员的网站,我添加了一个功能,包括从40个可能的消息池中发送一条随机消息。成员永远不会收到相同的消息两次。这是否是非正规化的情况?
一个表包含40条消息,另一个表映射消息和成员之间的多对多关系。
cron脚本每天运行,从30,000中选择一个成员,从40中选择一条消息,然后检查此消息是否已经发送给此用户。如果不是,则发送消息。如果是,它会再次运行查询,直到找到尚未被此成员接收的消息。
我现在担心的是这个m-m表格将变得非常大:在30,000个成员和40个消息中,我们已经有了120万行,通过它我们必须搜索才能找到尚未发送的消息。
这是反例化的情况吗?在成员表中,我可以添加40列(message_1,message_2 ... message_40),每次发送消息时都会添加1个标志。如果我没有弄错,这会使cron脚本中的查询运行得更快
?
我同意,我在这里详细阐述了一下 – 2009-12-03 11:14:01
你能否在CONCAT_WS的第一条语句中说明你正在做什么? – stef 2009-12-04 09:04:25
嗯,我使用逗号分隔符几乎连接了所有未发送的消息的ID。这允许在一个SELECT中为每个用户返回一个id列表。 – 2009-12-06 14:02:12