0

mysql データベースと通信する php ドキュメントに次のようなコードがあります。

$db = new PDO('mysql:host=127.0.0.1;dbname=db;charset=UTF-8', 'name', 'pw',array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true));    

$stmt=$db->prepare("SELECT SUM(anything)
                                FROM table
                                WHERE date IN (SELECT date FROM table WHERE something=:something AND somethingElse=:somethingElse) 
                                AND somethingElse=:somethingElse1");

このコードは、ブラウザーで初めて実行するのに長い時間がかかります... 更新して再度実行すると、100 倍以上速く実行されます。私は、このような pdo ステートメントが更新時に非常に高速に実行される原因を突き止めようとしていますが、それを理解することはできません。

4

5 に答える 5

1

最適化するために、いくつかの簡単なポイント:

  1. INおよびネストされたクエリは避けてください。
  2. 結合/検索されたフィールドにインデックスを追加してください。
  3. また、可能であれば、合計を事前に計算して、別のテーブルに保存します。
于 2013-02-25T19:44:38.850 に答える
1

それは mysql のクエリ キャッシュが起動することです... RAM (読み取り: MySQL キャッシュ メモリの割り当て) が十分に大きい限り、これはほとんどすべての SELECT で発生します。

于 2013-02-25T19:41:51.920 に答える
0

まず、正しいインデックス付けがあれば、このようなものは(大規模なテーブルであっても)まったく長くはかからないはずです。

テーブルとは何ですか。また、インデックスはどのように設定されていますか。これは、クエリを最適化するのに役立ちます。

于 2013-02-25T19:45:07.437 に答える
0

それは単なるクエリキャッシュです。
準備済みステートメントとは関係ありません。

とにかくクエリを最適化して、常に高速に実行する必要があります。

于 2013-02-25T19:41:58.767 に答える
0

サーバーはクエリの実行を「キャッシュ」します。そのため、最初は時間がかかりますが、その後はシステムが解決方法を知っています。

于 2013-02-25T19:42:34.333 に答える