• ベストアンサー

PHPとMySQLの高速化

saintandreの回答

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

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

popo_lucky
質問者

お礼

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

関連するQ&A

  • PHPで、queryは何回投げるべきでしょうか

    エクセルで作ったような単純な縦横型のリレーショナル構造だとして、各列の一番大きな値を赤文字にしたいと思っています。 このとき、 (1)1回のクエリで全体を取得し、連想配列などにいれて各列をソートして1番大きな値を探す (2)必要な回数分、適したクエリを投げて、結果を変数に格納し、IDなどで一致させる という二通りのやり方を考えたのですが、どちらが一般的でしょうか。 (1)の場合は、DBに負荷がかからなくていいのかなと思いますが、多彩なフィルタやソートを使わずに、DBを使う意味があるんだろうかと考えてしまいます。 (2)の場合、列数が多いと、たとえば今回は5列分の結果を取得しようと思っていますが、1ページを表示させるのに5回DBへのアクセスがあることになり、運用としてどうなんだろうと考えた次第です。 アクセス数などにもよるのかと思いますが、一般的にこうする、というのがありましたら教えていただければと思います。 もちろん(1)(2)以外の方法でも歓迎です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPからMySQLへのクエリの振り分け方法

    LAMP構成のWebアプリケーションでのDBサーバ増設について質問です。 今までDBサーバ(MySQL)1台で運用していたのですが、 1台増設してレプリケーションを行うことになりました。 DBサーバ1:マスター(新設) DBサーバ2:スレーブ そこで、PHPスクリプトを全面的に見直して、以下のように DBへのコネクション部分を変更する必要が出てきました。 ・コネクション中に一度でも更新系のクエリを発行する場合はマスターへ ・それ以外はスレーブへ これをインクルード先まで追って調査するのは現実的ではないため、 一括で振り分ける方法を探しています。 雑で申し訳ありませんが、環境は以下の通りです。 PHP 5.1.6 (cli) PEAR::DB(1.7.13) MySQL 4.1.22

    • ベストアンサー
    • PHP
  • PHPとMySQLについて

    社内サーバーにWebアプリをUPし、 全てデータベース管理にするため、MySQLを使用しました。 参考書を見ながら作成したため、構文に間違いはありません。 参考書は「 はじめての人のためのかんたんPHP + MySQL入門」です。 この参考書の第8章にあるWEBアプリを忠実に再現しました。 しかし、フォームに情報を入力し、登録を押しても情報が反映されません。 以上と同じように、ぶっとびねっと(フリーレンタルサーバー)でもUPし、phpMyAdminでDBを構築しましたが、 これも同じく登録情報が反映されませんでした。 無論、phpMyAdminから直接CREATEし、HPに情報を反映させるのは可能です。 その際、日本語が???となってしまいましたが、その他は正常です。 一番の問題は、なぜHPから情報を入力し、それがDBへ反映されないのかです。 .htpccessやPHP.iniの設定と何か関係があるのでしょうか? 社内サーバーに.htaccessファイルは無いそうです。 となると、php.iniだと思います。 私は初心者のため、イマイチPHP.iniが良く分かりません。 ローカルにApacheなどを落とした場合は、C:Windowsの中にPHP.iniの設定をいじればいいと思いますが、 社内サーバーの場合、サーバー上のどこかにあるPHP.iniファイルの設定を変える必要があるのでしょうか? 以上、ごちゃごちゃしてて申し訳ありませんが、 お助け下さい。

    • ベストアンサー
    • PHP
  • PHP+MySQLのショッピングカートについて

    PHP+MySQLのショッピングカートについて 宜しくお願いします。 PHP4.4.1+MySQL4.1.15でショッピングサイトを構築しております。 このサイトはPCと携帯に対応させるように構築しております。 携帯でも購入出来る様にする為に、カートはCOOKIEでは無く、SESSIONに依存しております。 ユーザが商品を選択すると、SESSIONに商品IDや、ユーザの選択した内容が格納されます。 複数の商品ID、選択内容を格納させる為に多次元配列にて格納しております。 買い物が終わり決算する時に、個人情報を入力し、確認ページ表示後にMySQLのDBに個人情報と選択項目をそれぞれinsertしていきます。 商品情報については、カートに入れた商品数分を繰り返し処理を行い、1レコードずつinsertしていきます。 MySQLのDBに書き込み後、自動返信にてメールを店舗とユーザに送信しています。 この様なシステムで、問題が発生しております。 決算後、個人情報、商品情報が欠落している場合があります。DBにも自動返信メールにも明記されず、スッポリ無くなっているのです。 それも、全データではなく、個人情報の電話番号だけとか、商品情報の選択項目の1つだけといった具合です。 毎回ではなく、ときどき現れます。 これはプログラムの問題なのでしょうか?それとも、サーバの処理能力の問題で、同時アクセス時に起きている現象なのでしょうか? 私の環境下では何度テストしても現象が現れない為に、原因が分からず悩んでおります。

    • ベストアンサー
    • PHP
  • PHP + MySQL で登録時に重複チェックをしたいです。

    PHP + MySQL で登録時に重複チェックをしたいです。 DBには ID Title Name 1 Book1 Author1 2 Book2 Author2 と3000件ほど入っています。これからも増えていく予定です。 このDBにPHPから新たに100件ほどのレコードを一気に登録したいときに、 ・Title名が既にDBに登録されている → 何もせずに次へ ・Title名がまだ登録されていない時 → DBへ登録 と、この様な処理をさせたいと考えています。 現状は登録したい値を配列で回し、一つ一つSELECT文で件数チェックをし、0件で有れば登録。0件以外であれば無視。と、している状況です。 ただこれですと、どうしてもサーバーに負担が掛かってしまう気がするのです。 もし、何か他に良い方法がありましたら教えていただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+mySQL認証画面

    サーバーの引っ越しで新しいサーバーにてプログラムの動作確認を行っています。 管理者パネルに入るのに、PHPで作成した認証プログラムでログインしようとすると、入力しても何度も聞いてきて入れません。 旧 MySQL5.0.22   phpMyAdmin2.8.2.4 新 MySQL5.1.69 phpMyAdmin3.5.8.1  IDとパスワードはデータベースで設定。 管理者パネルで変更できるようになっている。 $sv = "**"; $dbname = "**"; $user = "**"; $pass = "**"; ログイン認証 //データベースに接続する $conn = mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die("データーベース接続エラー"); $sql = "SELECT id, pass FROM pass_t WHERE pno=1"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $db_user_id=$row['id']; $db_password=$row['pass']; } if(!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] != "$db_user_id" || $_SERVER["PHP_AUTH_PW"] != "$db_password") { header("WWW-Authenticate: Basic realm=\"login\""); header('HTTP/1.0 401 Unauthorized'); echo "ユーザー名またはパスワードが間違っています。<br>"; echo "もう一度はじめからやり直してください。"; exit; } 細々変えて試してみましたが駄目でした。 まだまだわからないことだらけの初心者なので、どうにもならずで 解決策がありましたらぜひ教えて頂けますと幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPでMySQLのDBに接続

    PHP,MySQLが使えるレンタルサーバーを借りているのですが, PHPでMySQLに接続し、php_dbを選択をするようにしたいのですが、 この時DBファイルはどこに置けばいいのでしょうか? 現在はMySQLの管理コマンド(?)とは別にpublic_htmlの中に PHPフォルダを作り、そこにDBファイルを入れています。 PHPのスクリプトは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>練習</title> <meta http-equiv="content-language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head><body> <?php $con = mysql_connect(); if (!$con) { echo ("Error:MySQLに接続できませんでした。<br />"); } else { echo ("接続ID=$con<br>\n"); } $selectdb = mysql_select_db("php_db" ,$con); if (!$selectdb) { echo ("Error:データベースを選択できませんでした"); } else { echo ("データベースphp_dbを選択しました。"); } ?> </body></html> としています。 MySQLには接続ができるのですが、php_dbには接続ができません。 php_dbのおき場所を変えるのか、ファイルの指定が間違っているのか その他、どの要に変更をしたらよいのでしょうか? お願いします。 環境はレンタルサーバーがLINUXでPHPのバージョンなどはわからないんです・・・!! 開発がOSがW2kでFTPで転送してます。

    • ベストアンサー
    • PHP
  • php経由のMySQL

    php経由で、サーバー上のMySQLにアクセスします。 その場合の、MySQLへの接続アカウントの処理は、どうするべきなのでしょうか? DBとのやり取りのコードは、サーバー上のphpファイルに書かれていますし、そのphpにアクセスしてデータをやり取りします。なので、MySQLへ接続する際のMySQLアカウント(ユーザー名とパスワード)が、php上に書かれています。 通常phpのコード自体は、ブラウザからは読めませんが、 アクセスできる場所にあるという時点で、セキュリティ上 問題があるのかなとも思います。 しかし、多くのサイトで、このような、webサーバー上のphpを通してMySQLにアクセスするのは、一般的な形だと思いますが、そのようなサイトでは、MySQLにアクセスするためのアカウントを、どのように管理しているのでしょうか? 当然、そのwebサイトへのログインアカウントとは別で管理されていると思うのですが・・・。 わかる方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPからMySQLの起動について

    PHPからMySQLの起動について レンタルサーバーを借りてPHP,MySQLの勉強をしています。 PHPからMySQLの起動ができなくて困っていますので、教えていただきたいのですが、 <?PHP $dbkidou = mysql_connect("どこのサーバーか","ユーザー名","パスワード"); //データベースの起動ができなかった場合 if ($dbkidou == False) { print ("error"); exit; } $db = "データベースの名前"; ?> まずレンタルサーバーのドメインを「abc.com」としています。これに対するユーザー名が「def」、パスワードが「ghi」です。 そしてMySQLデータベースは「jkl_m」,「jkl_n」の2つを設けていて(phpMyAdminで作成しました)MySQLユーザ名が「opq」、パスワードが「rst」です。今回は「jkl_m」のサーバーを起動させたいのですが、上記PHP文の、 どこのサーバーか ユーザー名 パスワード データベースの名前 の各部分にどれを書けば良いのでしょうか? 何通りか試しているのですが、うまくいかないんです…

    • ベストアンサー
    • PHP