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

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

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

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

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

●質問者: kou32rr
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL PHP コード フラグ プログラム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● chuken_kenkou
●33ポイント

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

性能は出せます。

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

◎質問者からの返答

ありがとうございます。

勉強してみます。


2 ● あひる
●33ポイント

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

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

◎質問者からの返答

ありがとうございます。

勉強してみます。


3 ● あひる
●14ポイント

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

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

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

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

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

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

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

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

)と言います。

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

関連質問


●質問をもっと探す●



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