[PHP-users 28798] Re: PHPからMySQLを使って3つのテーブルからデータ検索する方法について

murayama locutus @ pg8.so-net.ne.jp
2006年 3月 23日 (木) 21:49:57 JST


MySQL初心者の村山です.

あまり話について行けてないので,外してたらごめんなさい.

> >MySql3ってjoinは使えなかったでしたっけ?
> >使えると思ったのですが、使えればこんな感じでsql作るとか・・・
> >
> >select * from 登録テーブル as a left join 地域テーブル as b on a.ID=b.ID left join 詳細テーブル as c on a.ID=c.ID where 検索条件;
> やったのですが、検索に25秒もかかってしまうんです。
> 検索項目が多いからなんでしょうけれど・・・

昔MySQL(たしか4.0.x)でLEFT JOINを多用した時は,絞り込み条件を
一番前に持ってくることで格段に(例えば数十秒=>1秒以下)早くなりま
した.その時は,
「一度非常に巨大なテーブルを内部的に作成した後に絞り込みをかける」
という処理をしていたものを、
「絞り込んでから内部的なテーブルを作成する」
に変更したのですね.

MySQLはどうもSQL文の最適化が弱いらしく,あまり広範囲の最適化は
自動ではやってくないようです.その文を手動最適化でカバーしたという
わけです.

>すでにPHPの問題ではないと思いますが...
MySQLのMLで改めて質問することで、もっと詳しい説明が聞けるかもしれませんね。

> MySQLの4.1.18がリリースされているんですが、
> これにバージョンアップしたほうが良いのでしょうか?
> 確か、4.1.*では、サブクエリが使えるとか・・・
4.1がまだα版だった頃の昔の話ですが,4.0.xで作っていた物を
4.1.x(α版)に移行したらJDBCコネクタの互換性がない上に文字
コード周りのバグで苦労させられたことがありました。今はバグの
問題はなくなったにせよ、文字コードやコネクタの設定とかで
トラブルになる可能性は残っているかもしれません。

-- 
murayama <locutus @ pg8.so-net.ne.jp>




PHP-users メーリングリストの案内