mysql_queryの処理速度が遅い

このQ&Aのポイント
  • PHP+MySQLでプログラミングをしている際に、mysql_queryの処理に時間がかかっています。
  • Webminで同じSQL文を実行すると1秒程度で終わるのに対して、mysql_queryでは15秒かかります。
  • optimizeを実行してもあまり効果がないため、mysql_queryの処理時間を短縮する方法を知りたいと思っています。
回答を見る
  • ベストアンサー

mysql_queryの処理速度が遅い

PHP+MySQLでプログラミングをしているのですが、実行時にmysql_queryの処理に時間がかかっています。状況は以下の通りです。 ・処理時間を計測するとmysql_queryの実行に15秒程度かかっています。 ・Webminで直接同じSQL文を実行すると1秒程度で終わります。 ・SQLのコマンドは単純なUPDATEです。 ・indexは設定してあります。 ・DBに格納してあるレコード数は数100件程度です。 ・optimizeは実行してみましたが、あまり効果はありませんでした。 お聞きしたいのはWebminで実行すると1秒程度で終わるSQL文がmysql_queryで実行すると、なぜ時間がかかるのかということです。 mysql_queryで時間がかかる原因およびmysql_queryの処理時間を短縮する方法などがあれば教えてください。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数10

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

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

通るすがるです。 上記状況プラス、、DBとWebサーバーは同じサーバという状況から考えられることは ディスクスワップが発生している(メモリ不足)可能性しか考えられないですね データ件数が100件程度とありますが、レコード長および項目数はどれぐらいなのでしょうか? また、php.iniの設定(特にメモリ制限について)はどのように検討されたのでしょうか? もし、未検討でしたら、http://www.php.net/manual/ja/ini.core.phpのリソース制限の memory_limit設定当たりから、検討してみては如何でしょうか?

tomtomoo
質問者

お礼

回答ありがとうございました。 お礼が遅くなってすみません。教えていただいたように memory_limitなどの設定をいろいろと変更して 多少改善してきました。 大変参考になりました。感謝致します。

その他の回答 (2)

回答No.2

はじめまして、通るすがるともうします。 上記現象なのですが、sqlのせいでないかもしれません。 htmlの生成に時間(つまりdbサーバー->web->ie)の間で時間が かかっている可能性はないですか? htmlの生成などは結構cpuを浪費しますよ あとはdb-webサーバー間の回線速度とか

tomtomoo
質問者

お礼

回答ありがとうございました。

tomtomoo
質問者

補足

PHPの各処理の処理時間を出力すると、mysql_queryで時間がかかっていましたので、今回の場合htmlの生成で時間がかかっているわけではないと思います。また、DBとWebサーバーは同じサーバなので、そのやりとりに時間がかかることもあまり考えられません。 WebminでSQL文を実行すると短時間で終わるのに、mysql_queryで実行するとmysql_queryを呼び出してから戻るまでに時間がかかる原因を知りたいということです。

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

おなじphp環境であるphpMyAdminでテストしてみては?

tomtomoo
質問者

お礼

アドバイスをいただき、ありがとうございます。

関連するQ&A

  • mysql_queryが動かなくて困っています

    こんにちは、Web上のphpのページを見ながら学習している者です。 早速躓いてしまっていまして、どなたか添削していただければと思います。 下のようなスクリプトを組んだのですが、接続は成功するのですが 問い合わせのほうがうまくいかず、クエリの送信に失敗しました。になります mysql_query文の各パラメーターはphpMyAdminの画面からカットアンドペーストしたもので、タイプミスや大文字小文字のミスは無いはずなのですが… どうかよろしくお願いします >><?php >>   $url = "11111.jp"; >>   $user = "+++++"; >>   $pass = "*****"; >>   $db = "dbname"; >>   // データベースへ接続("サーバ名","ユーザ名","接続用パスワード") >>   $link = mysql_connect($url,$user,$pass)or die("MySQLへの接続に失敗しました。"); >>   $sdb = mysql_select_db($db)or die("データベースの選択に失敗しました。"); >>   // 問合せ処理 >>   $query = "select 名称 from tablename where ID=1"; >>   $result = mysql_query($query)or die("クエリの送信に失敗しました。<br />SQL:".$sql);

    • ベストアンサー
    • PHP
  • mysql_queryがある場所について

    ZendFramework-1.11.7を使用しています。 Zend_DbでPdo_Mysqlで接続して利用しています。 そこで、クエリを実際に実行している箇所を探しているのですが、 ソースの中にmysql_queryが見つからないのです・・・ PHPとかでSQLを発行したい場合にはmysql_queryでやるんですよね?? ┬ Zend │└ Db │ ├ Statement.php ファイルには public function execute(array $params = null) { /* * Simple case - no query profiler to manage. */ if ($this->_queryId === null) { return $this->_execute($params); } があるのですが、これは $this->_execute($params); を実行していて ┬ Zend │└ Db │ ├ Statement │ │ ├ Pdo.php ファイルには public function _execute(array $params = null) { try { if ($params !== null) { return $this->_stmt->execute($params); } else { return $this->_stmt->execute(); } があるのですが、これは $this->_stmt->execute(); を実行しているようなのです。 なんか行ったり来たり(^^;)していて最終的にどこでSQLを発行(mysql_queryを実行)しているのかが フォルダ全体を文字列検索しても見つからないのです・・・ _stmtが何のオブジェクトなのかが定かではないので、追跡しづらいのかもしれませんが、 どこでSQLを発行しているのか教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • mysql_queryの戻り値

    $return_obj = mysql_query($sql); mysql_query()が正常にSQL文が行われた場合、if(true){}にしたいのですが、 どのようにすればよいですか? return値を↓のようにしても、かならずしもtrueにはならないと聞いたのですがどうなんでしょうか? if($return_obj){} 宜しくお願いします。

  • PHP+PDO+MYSQL で実行されたSQL文の取得について

    PHP+PDO+MYSQL で実行されたSQL文の取得について PEARのDBからPDOへの移行をしていましてデバック用のSQL文取得で困っています。 $sql = "SELECT * FROM sample where id = ? And id2 = ?" PEARのDBでは $db->query($sql,array(1,5)); $db->last_query; で実行したSQL文を取得することは可能でした。 PDOの場合 $sql_result = $pdo->prepare($sql); $sql_result->execute(array(1,5)); でリプレースフォルダ(クォート処理?)を利用してSQLを実行出来るようですが、 実行したSQLを確認する方法がマニュアル等を読みましたがどうしても分かりません。 どなたかご存知の方がいらっしゃいましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • MySQL 文字化けについて(PHP)

    いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

    • ベストアンサー
    • MySQL
  • PHPからMySQLに接続はできるが、Sql操作ができない

    PHPからMySQLを使おうとしているのですが、 SQLクエリでの操作に対する反応がなく、困っています。 mysql_select_db()でtrueが返ってきているので、 DBにはアクセス出来ているようなのですが、 mysql_query()を実行しても何も返らず、エラーも出ません。 SQLに間違いはなく、あってもエラーがでるはずだったと思うのですが… 何かお分かりのことが御座いましたら、ご協力お願いいたします。

    • ベストアンサー
    • MySQL
  • XAMPPのMYSQLでスロークエリの出力

    WindowsXP上のXAMPPでMySQL+PHPを使用したサイト開発を行っていますが、 PHP内で実行されるSQLコマンドが正しくMYSQLへ投入されていることを確認したいと考えています。 スロークエリの機能を用いることで、MYSQLに発行されたSQLコマンドを表示できると思いますが、 XAMPPのMYSQLに対して、どのような設定を行えばよいのかわかりません。 いろいろ調べたところだと、単純にLinux上のスロークエリ設定をでは動作しないようです。 どのような設定を行えば、XAMPP上でスロークエリをファイル出力できるのでしょうか。

    • ベストアンサー
    • MySQL
  • MySQLのテーブル連結でクエリに4分以上かかる

    初めまして、よろしくお願いします。 現在PHPよりアクセスするクエリを作成しています。 mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%'; Empty set (4 min 42.79 sec) 上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。 テーブル内のレコード数としては以下のようになっています。 mysql> select count(*) from articles; +----------+ | count(*) | +----------+ | 738338 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from titles; +----------+ | count(*) | +----------+ | 34821 | +----------+ 1 row in set (0.00 sec) できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。 これは、やはりハードウェアの性能限界なのでしょうか? またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか? どなたかヒントでも頂ければ幸いです。 ぜひ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLで、INSERT文でエラー

    下記のスクリプトで、MySQLサーバーのテーブルの中身を見ようとしたら、 返り値が空でした(行数0) ( クエリの実行時間 0.0010 秒 ) と表示されます。 どこが間違ってるのでしょうか。 ////////////////////// // データベース登録 // ////////////////////// $con = mysql_connect("mysql020.******", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("LAA0471050-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8"; mysql_query($sql, $con); $sql = "INSERT INTO ideamemo_table (color, title, contents, create) VALUES ('$color', '$title', '$contents', '$create');"; mysql_query($sql, $con); mysql_close($con); ?>

    • ベストアンサー
    • MySQL
  • mysql_query文字コード変換について教えてください。

    PHP+MySQLで開発を行っておりますが、次の問題でつまずいて 先に進めず困っております。 お助け下さい 環境 Server : Windows2003Server PHP : 4.4.1 MySql : 4.0 <<<<< PHPソース >>>>>>>>>>>>>>> // MySQLに接続 if (!($cn = mysql_connect("localhost","userXXX","PassXXX"))) { die('接続できませんでした: ' . mysql_error()); } // MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES 'sjis'") or die("can not SET NAMES sjis"); // MySQL DB 選択 if (!(mysql_select_db("dbXXX"))) { die('データベースが見つかりません.'); } // MySQL 問い合わせ $sql = "SELECT * FROM test"; if (!($rs = mysql_query($sql))) { die('セレクトに失敗しました.');       ・       ・       ・ <<<<< PHPソース >>>>>>>>>>>>>>> 上記の環境でソースを実行すると、「can not SET NAMES sjis」の メッセージでエラーとなります。 この関数をとると処理は最後まで正常終了するのですが、 表示される漢字は、文字化けしています。 ちなみにMySQLの5.0環境で実行すると問題なく変換されて正しく 表示されます。 MySQLの4.0環境では mysql_query("SET NAMES 'sjis'") の 関数は使えないのでしょうか? もし使えないとするならば、何か変わりの方法があると良いのですが 表示する時に項目ごとに変換する mb_convert_encoding を 使う方法はあると思うのですが、出来たら手間をかけたくないのと MySQLの4.0環境とMySQLの5.0環境両方でなるべく変更を少なく 実行したいと思っております。 どなたか、お分かりの方がおられましたら是非ご教授下さい。 

    • ベストアンサー
    • PHP