人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLのテーブルのjoinについて

テーブルは以下とします。
t_contents
id,user_id,category_id,picture_id

t_user
id,name

t_category
id,name

t_picture
id,name

ここで、以下の情報がほしいとします。
SELECT
co.id,
u.name as user_name,
ca.name as category_name,
p.name as picture_name
FROM
t_contents co,
t_user u,
t_category ca
t_picture p
WHERE
co.user_id = u.id
ANDco.category_id = ca.id
ANDco.picture_id = p.id

以上のようなSQLを使っているのですが、これ以上に項目が20くらいあった場合、joinするテーブルが20になるのは、とても処理コストがかかってしまうような気がしています。

以上のようなSQLをより適切に書くとどうなるのでしょうか?

なおMYSQL4を使用しているため、サブクエリが使用できません。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:as Ca ca. name SELECT
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● memo77
●27ポイント

当然結合するテーブルが多くなればコストがかかるのはあたりまえですが、

「必要以上に」ということでしょうか。

結合させる側(今回で言えばt_contents以外のテーブル)がprimary keyで

結合されているならそれ以上にコストを下げることはできないと思います。

私ならこうでしょうか。


SELECT

co.id,

u.name as user_name,

ca.name as category_name,

p.name as picture_name

FROM t_contents co

INNER JOIN t_user u

ON co.user_id = u.id

INNER JOIN t_category ca

ON co.category_id = ca.id

INNER JOIN t_user t_picture p

ON co.picture_id = p.id

◎質問者からの返答

ありがとうございます。

なるほど、こういう書き方もあるんですね。


2 ● Yota
●27ポイント

t_contents

id,user_id,category_id,picture_id

t_user

id,name

t_category

id,name

t_picture

id,name

下の3テーブル(マスタ)が更新されない。追加されるのみである。と言う前提で非正規化すればいいと思います。

t_contents

id,user_id,user_name,category_id,category_name,picture_id,picture_name

でも、いまどきのDBMSならINDEXを適切に設定しさえすれば20や30の結合はどうということはない気がします。

◎質問者からの返答

そうなんでしたか。

あまり結合してはいけないとばかり考えてました。

ありがとうございます。


3 ● Yota
●26ポイント

すいません。

いまどきのDBMSならINDEXを適切に設定しさえすれば20や30の結合はどうということはない気がします。

と書いたものの、実際には結合テーブルの数だけでなく各テーブルのレコード数に依存するので一気に増やさないで確認しながらやってください。

それと上の人と重なりますが標準SQLでは、

t_contents

id,user_id,category_id,picture_id

t_user

user_id,name

というふうに、カラムの名前を同一にしておけば、

ON t_contents.user_id = t_user.t_user_id

のところを

USING('user_id') ;

とすっきりかけるので、検討してみて下され。

MySQL4で使えるかどうかはわかりません。

参考

http://dev.mysql.com/doc/refman/4.1/ja/join.html

◎質問者からの返答

USING初めて知りました。

すっきりしますね。

しかし今は、カラム名は同じでないですね。

参考になります。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ