我今天在博客文章http://www.andrewrollins.com/2009/06/21/mysql-join-performance/上阅读了关于加入效果的文章。如图所示,加入可能会以某种方式降低性能。
现在让我们看一下两个表的例子,user_profile和user_gallery。
user_profile
user_id | avatar | nickname | ...
user_gallery
image_id | user_id | image | caption | is_avatar
在页面浏览用户上,将列出用户的昵称和头像图像。
我可以通过加入
获取用户列表中的图像INNER JOIN user_gallery ON user_gallery.user_id=user_profile.user_id WHERE user_gallery.is_avatar=1
或者我可以将头像字段添加到图像路径中。在这种情况下,我不需要使用 is_avatar 字段,并且我拥有在表user_profile中显示用户所需的所有数据。因此不需要额外的连接。但由于头像图像是用户图库的一部分,这意味着头像的值也在user_gallery表中,因此一个重复值。
是否真的值得严格遵守可能会降低性能的规范化规则,并牢记这个确切的案例?在这种情况下会更好吗?
答案 0 :(得分:1)
在我看来,合乎逻辑的选择是放弃is_avatar
字段,只有user_profile.avatar
引用image_id
......