MySQL


現在PHPでWebアプリを作成しているのですが、一回のアクセスに4つ以上のSQLを実行しているので join を使用してSQL文を減らそうとしています。(負荷及び高速化対策)

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_09.htm の単純結合に載っている方法で、test2mのkey1とtestmのkey1を同時取得するにはどうすればいいのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/02/06 05:12:52
  • 終了:2007/02/12 07:34:15

回答(3件)

id:toohigh No.1

toohigh回答回数291ベストアンサー獲得回数372007/02/06 07:43:37

ポイント23pt

select test2m.key1, testm.key1 from test2m, testm;

・・・とかでいかがでしょうか。

http://dev.mysql.com/doc/refman/4.1/ja/example-foreign-keys.html

id:esecua

いやそうじゃなくて select * from で取得し、後にPHPで選択するという感じです。

$res = mysql_query(select * from test2m"... testm

while($row = mysql_fetch_object($res))

{

$row->なんか

}

見たいな感じでお願いします。

2007/02/06 08:55:03
id:kaijikaiji No.2

kaijikaiji回答回数40ベストアンサー獲得回数02007/02/06 09:07:01

ポイント47pt

こういうことですかね。

$res = mysql_query("select test2m.key1 as key1_2m, testm.key1 as key1_m from test2m, testm"

while($row = mysql_fetch_object($res))

{

$test2m = $row->key1_2m;

$testm = $row->key1_m;

}

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 421 401 75 2007-02-06 09:37:23
  • id:b-wind
    単純結合なんて使ったら負荷も減らないし、高速化にもならないでしょう。
  • id:bonlife
    * 間違えて回答してしまいましたので、開かなくて結構です。
    * 内容は以下と同じです。

    処理のボトルネックが本当にSQLにある、と仮定してコメントします。

    直積演算では1,000レコードあるテーブルを2つ結合すると1,000*1,000で1,000,000レコードが生成されます。
    複数人が利用するWEBアプリケーションの場合、メモリ上に展開されるデータが膨大になるので、単純結合で全ての情報を一度に取得し、負荷軽減を図る、というのは妥当なアプローチではないと思われます。
    まずは、DBを設計しなおし、キチンと正規化をし、第3正規化してみるのが重要です。
    その後、必要に応じてVIEWを定義するなどしてみてはいかがでしょうか。
    「設計は正しい」という仮定に立った場合でも、クエリのキャッシュ、HEAP TABLEの活用など、別の方法を選択した方が賢明です。
  • id:esecua
    みなさんありがとうございます。

    完全に知識不足でした。単にSQLを減らせば負荷が減るかなと思っていました。

    もう一度検討してみたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません