Mysql php / pdo语句执行时间在刷新时大不相同

时间:2013-02-25 19:39:21

标签: php mysql pdo

我在与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语句在刷新时运行得如此之快并且无法弄明白。

5 个答案:

答案 0 :(得分:1)

这是mysql的查询缓存开始...只要你的RAM(读取:MySQL缓存内存分配)足够大,几乎任何SELECT都会发生这种情况。

答案 1 :(得分:1)

优化,快点几点:

  1. 避免IN和嵌套查询。
  2. 请务必在已加入/已搜索的字段中添加索引。
  3. 此外,如果可能,预先计算总和并将其存储在另一个表中。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

您的表格是什么,以及索引是如何设置的。这有助于我们优化您的查询。