• ベストアンサー

PHPとMySQLの高速化

初心者プログラマです。よろしくお願いいたします。 例えば以下のような売上データベースがあったとします。 id:一意のID product_id:製品ID sum:販売個数 store_id:販売店ID このほか、製品DBと販売店DBを作り、それぞれ製品IDと販売店IDを介して結合させます。 製品は数が多く出入りも頻繁なので上の内容で問題ないかと思うのですが、販売店は店舗数は僅か3つで増減も数年に1度程度です。この場合、PHPで販売店の配列を array(0=>A店, 1=>B店, 2=>C店) のように用意し、このキーをstore_idとして運用する方法があると思います。(メンテナンスはPHPを直接書き換え) 以上のように、分量の少ないデータ群は 1.DB化してリレーショナルで運用 2.配列として運用 のいずれが高速になるのでしょうか? 現在WEBサーバーとDBサーバーは別PCですが、1つのPCで運用する場合や、また店舗数が30軒程度ある場合なども含めてご教授願います。どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

正確な計測などはしていないあくまで個人的な感想ですが MySQLで数が少ない場合は配列の方が速いです。 またDB化した場合でもリレーションよりも一度プログラム上で 配列に格納して処理した方が速かったりします。 ただし配列への格納は別ファイルに記述して include_once を 使用して呼び出すことをお勧めいたします。こうしておけば 変更時にはそのファイルのみを変更すれば全てに適応される ようになります。 またシステム上で変更したいなどの理由からDB化する必要が 出た場合も、そのファイル上でDBから呼び出して格納する ように記述を変更すれば問題ありません。

popo_lucky
質問者

お礼

ご回答ありがとうございました。 言葉足らずでしたら、仰る通りでincludeして利用することを前提としております。 実は、私も個人的な感想で、明らかに配列データの方が処理速度が速いと感じておりました。ただそれが、私のケース特有のものなのかどうか分からず質問した次第です。 大変参考になりました。ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>今回は「速度」に関して質問させていただきました。 そう意味では「わからない」というのが回答です。 結局販売店データをインクルードしている時点でオーバーヘッドは 発生しているので、SQLの処理より軽いとは明言できません。 検索の条件や頻度、キャッシュのされ方などいろいろ考えても 配列にすれば速くなるという決め手の根拠に乏しいでしょう。 速い場合もあるでしょうし、遅い場合もあるでしょう。 >明らかに配列データの方が処理速度が速いと感じておりました それはソースの書き方に問題があるだけかもしれません。

popo_lucky
質問者

お礼

ご回答ありがとうございました。 PCスペック、SQL・PHPの中身など影響を与え得る諸条件を無視しての曖昧な質問ですので、体感速度のような答えしか出ないかもしれません。 仰るように、乏しい根拠をもとに、SQLの利点や、メンテナンス性を犠牲にする必要はないのかも知れません。参考になりました。ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

PHPにマスターデータを直書きするのはとてもおすすめできないですね・・・ よほど普遍的なスタティックなものなら別ですけど。 (たとえば都道府県とその県IDとか・・・) せっかくSQLを使うのですから、販売店テーブルをつくって 外部結合して処理すれば汎用性もあがりますので妥当だと思います

popo_lucky
質問者

お礼

ご回答ありがとうございました。 今回は「速度」に関して質問させていただきました。

関連するQ&A