商品リストを表示するプログラムをphp+mysqlで作っています。


上司から商品一つ一つについて公開期間を設定したいとのことで、
初めは公開・非公開のフラグを設定し、その期間が過ぎたら変えたいと思っていましたが、
日付での制御と公開・非公開は2重でチェックしたいとのこと。
(その細かい意図を理解できていないのが大きなミスですが。。。)

素直に商品毎でdatetimeとの比較をするコードを書いたのですが、、、
どうにも負荷が大きい(効率が悪い)気がしてなりません。

コードを書くのが手間で記載できないのでちょっと抽象的ですが、
同様の処理をする場合の一般論を教えていただければありがたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/05/18 20:50:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:chuken_kenkou No.1

回答回数722ベストアンサー獲得回数54

ポイント33pt

日付にインデクスを付け、検索条件を範囲条件などのインデクスを有効利用できる条件にすれば、

性能は出せます。

http://q.hatena.ne.jp/だみー

id:kou32rr

ありがとうございます。

勉強してみます。

2008/05/18 20:21:46
id:ahirusan No.2

回答回数229ベストアンサー獲得回数3

ポイント33pt

MySQL内にストアドプロシージャ(rakuten:book:11506352:detailrakuten:book:11307019:detail)でロジックを組むのが一般的でしょう。複雑なロジックをDBMS外でやるのは非常に効率が悪く、MySQLの負荷という問題ではなく、アクセス回数の多さとソート回数の多さとが負荷になっていると思われます。アクセス回数の多さはストアドプロシージャでクリアでき、ソート回数の多さによる負荷はインデックスキー設定の工夫により回避可能です。日付だけでソートするのは効率が悪く、自動付加できるシーケンシャルナンバーと日付とを両方ともキーにすることで数十倍速くなります。このような方法を取ることによって、MySQLとのやりとりはストアドの起動と結果の受け取りの2回のみで済んでしまいます。このような方法を取ることで、言語がPHPであろうがJavaScriptであろうがRubyであろうがまったく関係のない処理スピードが得られます。

MySQLのストアドプロシージャを記述する言語に関しては、私はちょっと知りません。最近ではJavaでストアドを組むことができるDBMSもあるのですが。

id:kou32rr

ありがとうございます。

勉強してみます。

2008/05/18 20:21:21
id:ahirusan No.3

回答回数229ベストアンサー獲得回数3

ポイント14pt

はっきり申し上げて、仕様を理解していないということが一番の問題ですね。仕様を確実に理解するまで執拗にリーダーまたは先輩などに聞くことが、まず最初にすべきことです。でなければ、作ったものの意味がまったくありません。品質の悪いソフトウェアに「効率」という言葉はまったくマッチしないものですから。

仕様を理解し、その理解に基づいて美学を追究した設計・プログラミングをし、その次に初めて効率という問題に向き合うべきです。そういうのをリファクタリング(

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチン ファウラー Martin Fowler 児玉 公信 平澤 章 友野 晶夫 梅沢 真史
  • 出版社/メーカー: ピアソンエデュケーション
  • メディア: 単行本

データベース・リファクタリング

データベース・リファクタリング

  • 作者: スコット W アンブラー ピラモド・サダラージ
  • 出版社/メーカー: ピアソンエデュケーション
  • メディア: 単行本

)と言います。

「美学の追究」というのは、ありとあらゆる分野で行われるべき行動です。今、最も美学の追究が必要な分野は「政治・経済」でしょうね。って、関係ないか、すみません。

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

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

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

回答リクエストを送信したユーザーはいません