• ベストアンサー

mysqlのクエリキャッシュ

ページキャッシュについて質問です。 linux php mysqlでcmsサイト(oscommerce zencart)を立ち上げています。 最近動きが鈍くなってきました。 そこでmysqlのメモリ割り当てを多くとろうと思っています。 プラス my.cnfでクエリキャッシュを設定しようと思っています。 クエリキャッシュは、selectだけに有効なのですよね!? 又、id,passを発行し、ショッピングカートを使っていますが、そのあたりでクエリキャッシュはマイナスに働く事はありますか? 例えばカートに入れても商品確認ページへ戻った際入っていないとか

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

  • ベストアンサー
  • wardrobe
  • ベストアンサー率100% (2/2)
回答No.1

クエリキャッシュについて、確かにSELECTに対してのみ有効です。 MySQLのクエリキャッシュとは、SELECTステートメントのテキストを結果と合わせ格納します。 後で同じクエリを受け取ったときに、クエリの解析と実行をせずに、クエリキャッシュから結果を取り出し、クライアントに返します。 心配されている点についてですが、クエリキャッシュから古いデータが返ることはありません。データ変更があると、クエリ キャッシュに関連するエントリをすべてフラッシュします。 カートに入れて戻ったら商品がないといった挙動はクエリキャッシュとは関係なく、セッションの問題になると思います。 クエリキャッシュのせいで不具合が出た経験はないです。 参考URLはZenCart用のクエリキャッシュするためのモジュールについてです。

参考URL:
http://www.a-akinai.com/modules/d3downloads/index.php?page=singlefile&cid=5&lid=11
kenken8378
質問者

お礼

完璧な回答ありがとうございます

関連する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
  • Linux環境で、MySQLが立ち上がらない

    Linux環境で、MySQLが立ち上がらないのですが、そういう症状が出るのはメモリが足りないそうで、my.cnfの値を調整すればよいということなのですが、使用するメモリを上げるにはmy.cnfのどこの値をどのくらい調整すればいいか教えてください。 OSは、CentOS 7で、メモリは1GBです。

    • ベストアンサー
    • MySQL
  • mysqlコマンドでcharsetを指定したい

    my.cnfは下記の設定で、 LinuxのSSHでmysqlコマンドを使う時だけ、ujis(EUC) で表示したいのですがどうすれば良いでしょうか? ■/etc/my.cnf [client] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis mysqlコマンドではオプションが指定できないようで・・

  • MySQL(UTF-8)で ~ が文字化けしてしまう

    いろいろと検索などして探してみたのですが、情報が得られず困っております。お分かりの方おられましたらご教示いただけると幸いです。 環境 Apache 2059 PHP 5.1.6 MySQL 5.0.24a WindowsXP SP2 PHPソース すべてUTF8書いてます。 HTML出力もヘッダーでUTF-8で表示しています。 my.cnfでは すべて default-character-set=utf8 で統一しています。 さらに、PHPからMySQLに接続したときに set names utf8; もしてます。 この環境で、 ~ のみが文字化けしてしまいます。 たとえば、 "あ~あ" とINSERTすると SELECTしてみると "あ?あ" となってしまいます。 ~以外の文字は問題ありません。 またPHP上で発行クエリ文を表示させると、まだ~となっているので、MySQL側の問題だとは思っているのですが、どう設定すればよいかわからないところです。 MySQL Query Browzerからでも同様になってしまいます。 ご存知の方おられましたら、情報よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLでデータ登録がうまくいかない

    いつもお世話になっています。 早速質問です。 ユーザ登録フォームの作成をしています。 Select文を使って2重登録の確認後、DBに登録するのですが 2重登録はちゃんと機能しているのに、登録が出来ません。 どのようにしたらいいか、アドバイスいただけますか? お手数ですが、よろしくお願いします。 mysql_query("lock tables user_data write"); $sql = "select USER from user_data where USER = '" . $_POST["USER"] . "'"; $res = mysql_query($sql); if (mysql_num_rows($res) > 0) { echo "すでに登録済みです。"; mysql_query("unlock tables"); mysql_close($con); exit; } $sql = "insert into user_data(USER, pass) values ('" . $_POST["USER"] . "','" . $_POST["pass"] . "');"; mysql_query($sql); mysql_query("unlock tables"); mysql_close($con);

    • ベストアンサー
    • MySQL
  • ショッピングカートをZenCartかまめまめネット+かで迷っています。

    ホームページ作成ソフトを使用して 独学でネットショップ用ホームページを制作しております。 そこで、ショッピングカートを利用したいのですが、 迷っています。 「ZenCart」 http://zen-cart.jp/10.html か、 「まめまめネット+」 https://www.mame2.net/ かで。 ZenCartの説明サイトを読んでもちんぷんかんぷんな私が、 使いこなせるか自信がありません。 ただ、契約予定レンタルサーバーに問い合せたところ、 「osCommerce 日本語版」や「ZenCart」は、契約予定のレンタルサーバーの自動インストール機能を利用することで、簡単に設置が可能と言われました。 自作ホームページを活かしつつ「ZenCart」が利用出来るものでしょうか?

  • お勧めのショッピングカートは?

    現在、ルミーズのショッピングカートで運営をしています。 先日オープンソースで開発されている、ZenCartを見つけたのですがMySQLが無ければ動作できない事が分かりました。 現在レンタルしているサーバはMySQLが使用できないので、しぶしぶ諦める事にしたのですが、ZenCartのように高機能なショッピングカートはないでしょうか? 無料で自分で設置(カスタマイズしたいので)できる、プログラムを探しております。 お勧めや、実際に使用した感じも教えて頂けると助かります。 アドバイスをお願い致します。

  • Fedora7でMySQLの文字コードが設定できません

    お世話になっております。Linux初心者です。 Fedora7でLANGをjp_JP.eucJPにしました。 MySQLで、サーバーやデータベース、クライアントのキャラクタセットをEUCにしたいのですが、my.cnfがみあたりません。 どのように設定したらよいかわからず困っています。 どなたかお助けいただけないでしょうか。

    • ベストアンサー
    • MySQL
  • PHPのmysql_queryの変数について

    PHPのmysql_queryの変数について 全くの初心者です。 ログイン情報のチェックに使うクラスを調べているのですが、 mysql_queryの結果が表示されなく、原因が分かりません。 ご存知の方がおられましたら、ご教授頂けませんでしょうか。 よろしくお願い致します。 以下が全体のコードです。(1)(2)の問題があります。 <?php require_once "BaseDB.class.php"; // ログインをするクラス class Settings extends BaseDB { // ユーザ認証 public function isValidUser( $id, $pass ) { //var $qstring; // SQL文 //var $qresult; // mysql_query関数の結果 //var $fresult; // mysql_fetch_arrayの結果 $this->errors = 0; // MySQLにデータがあるか調べる $qstring = "select passwd from b_settings where username='$id'"; //クエリを実行 echo "setting class:<br>"; echo "qstring:<br>"; echo "$qstring<br />";//select passwd from b_settings where username=unknown $qresult = mysql_query($qstring); echo "qresult:<br>"; ////// (1)ココが表示されない。 echo "$qresult<br>"; if(!$qresult) { echo $qresult; $this->errorm = "ユーザ名が違います。table Error";////////// (2)このエラーが出てしまいます。 $this->errors++; return false; } if(!$fresult = mysql_fetch_array($qresult)) { $this->errorm = "ユーザ名が違います。"; $this->errors++; return false; } //echo "$pass /" . $fresult['passwd'] . "<br>"; if( $pass == $fresult['passwd'] ) { //echo "$pass /" . $fresult['passwd'] . "<br>"; return true; } else { $this->errorm = "パスワードが違います。"; $this->errors++; return false; } }//関数終了 public function loadSettings( $id='' ) { $qstring = "select maintitle,subtitle,maxtopics," . "username,passwd,mailaddr from b_settings where id=1"; //クエリを実行 $qresult = mysql_query($qstring); if(!$qresult){ $this->errorm = "DB Error:[$qstring]"; $this->errors++; return false; } if(!$fresult = mysql_fetch_array($qresult)) { $this->errorm = "設定情報がありません。"; $this->errors++; return false; } $this->maintitle = $fresult['maintitle']; $this->subtitle = $fresult['subtitle']; $this->maxtopics = $fresult['maxtopics']; $this->username = $fresult['username']; $this->passwd = $fresult['passwd']; $this->mailaddr = $fresult['mailaddr']; return true; } public function saveSettings( $id='' ) { $qstring = "update b_settings set ". "maintitle = '$this->maintitle', ". "subtitle = '$this->subtitle', ". "maxtopics = '$this->maxtopics', ". "username = '$this->username', ". "passwd = '$this->passwd', ". "mailaddr = '$this->mailaddr' ". " where id=1"; //クエリを実行 $qresult = mysql_query($qstring); if(!$qresult){ $this->errorm = "DB Error:[$qstring]"; $this->errors++; return false; } return true; } // プロパティ参照 function __get( $property ) { return $this->$property; } // プロパティセット function __set( $property, $value ) { $this->$property = $value; } } //クラス終了 ?>

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

    MySQLを使い始めたばかりものです。 SQLの学習のために下記ページのExample Databasesからworld database(InnoDB)をダウンロードし、インポートしました。 * http://dev.mysql.com/doc/index-other.html * http://dev.mysql.com/doc/world-setup/en/index.html そして、次のようなSQLを実行して countrycode列の値が 'JPN' の行が選択されることにびっくりしました。 mysql> select * from city where countrycode = 'jpn'; (1)Collationというものが関係することはわかったのですが、どうすればいいのかわからない状況です。 world database を PostgreSQL のようにデフォルトで大文字/小文字を区別して比較するようにしたいのですが、具体的にどのように設定したらよいのでしょうか? (2)要件によるとは思いますが、データベースのデフォルトのCollationはcase-insensitiveで、必要に応じて列を case-sensitive にしたり、select文に collate句を付加したりしているような使われ方が、MySQLでは一般的なのでしょうか? それとも、Collationにcase-sensitiveなものを指定してデータベースを作成し、必要に応じて列を case-insensitive 扱いするケースの方が圧倒的に多いのでしょうか? ■環境 * Linux Mint 17 Mate * MySQL 5.5.43 以下の設定を my.cnf に追加 - 文字コード関連をutf8に設定 - lower_case_table_names = 1 よろしくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう