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

这就是 mysql 的查询缓存启动...只要您的 RAM(阅读:MySQL 缓存内存分配)足够大,几乎所有 SELECT 都会发生这种情况。

于 2013-02-25T19:41:51.920 回答
1

为了优化,几个要点:

  1. 避免 IN 和嵌套查询。
  2. 请务必在加入/搜索的字段上添加索引。
  3. 此外,如果可能的话,预先计算总和并将其存储在另一个表中。
于 2013-02-25T19:44:38.850 回答
0

那只是查询缓存。
它与准备好的语句无关。

无论如何,您都必须优化您的查询,以使其始终快速运行。

于 2013-02-25T19:41:58.767 回答
0

服务器“缓存”执行您的查询。所以第一次需要很多时间,但之后系统知道如何解决它。

于 2013-02-25T19:42:34.333 回答
0

首先,如果您有正确的索引,这样的事情根本不需要很长时间(即使在大型表上)。

你的表是什么,索引是如何设置的。这将帮助我们优化您的查询。

于 2013-02-25T19:45:07.437 回答