避免加入以提高性能?

时间:2014-01-12 09:05:15

标签: mysql sql join key

让我说我有用户表:
| id |用户名|电子邮件|地址|

帖子表:
| id |发布| user_id |日期|

当我想要显示帖子时,每次我都需要使用user表从user_id中检索用户名。我想避免使用JOIN来进行这种简单的数据检索,所以我要做的是在post表中添加另一个coloumn:
| id |发布| user_id |用户名|日期|

这样,在显示帖子时,我不必使用JOIN来检索用户名

你认为这更好吗?

3 个答案:

答案 0 :(得分:1)

没有。您的替代结构易受不一致的影响(例如,如果用户更改了他的名字;请在此处阅读第3范式http://en.wikipedia.org/wiki/Third_normal_form#.22Nothing_but_the_key.22) 你为什么不想使用JOIN?你有设置适当的索引吗?

答案 1 :(得分:0)

我认为这取决于设计和未来,我建议你不要这样做:
虽然从目前的角度来看,你会认为避免加入会有更好的性能,但是如果你的应用程序扩展了,那么使用这个非标准化的表结构就不好了。

例如,如果其中一张海报更改了用户名,你怎么能实现呢?更新整个表?如果你的数据可能超过10万亿元,那将很难,因为update会在更新过程中锁定表格。
因此我不会推荐这个。

如果您的应用程序需要经常以这种方式更新,则可以省略加入性能。

答案 2 :(得分:0)

如果[id]表的[users]是主键,我认为使用JOIN就足够了。

或者,如果您选择有限数量的posts,例如10个帖子,也可以尝试这个sql:

select id, post, user_id, 
    (select username from users where id = user_id) as username, date
from posts
limit 0, 10