0

今日、このブログ投稿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つの重複する値になります。

この正確なケースを念頭に置いて、パフォーマンスを犠牲にする可能性のある正規化ルールに厳密に従うことは本当に価値がありますか?この場合、何が良いでしょうか?

4

1 に答える 1

1

is_avatar論理的な選択は、フィールドを放棄し、単にuser_profile.avatar参照を持つように思えimage_idます...

于 2012-05-19T15:31:34.757 に答える