今日、このブログ投稿http://www.andrewrollins.com/2009/06/21/mysql-join-performance/で参加パフォーマンスについて読みました。ご覧のとおり、参加は何らかの形でパフォーマンスを低下させる可能性があります。
ここで、user_profileとuser_galleryの2つのテーブルの例を見てみましょう。
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テーブルにもあることを意味し、1つの重複する値になります。
この正確なケースを念頭に置いて、パフォーマンスを犠牲にする可能性のある正規化ルールに厳密に従うことは本当に価値がありますか?この場合、何が良いでしょうか?