PDO PHP Mysql对特定查询的速度很慢

时间:2012-05-18 12:07:17

标签: php mysql pdo

我在php中使用PDO for Mysql时遇到了一个非常奇怪的问题。

我有一张大约有30,000行的表格。

如果我尝试运行此查询:

  

SELECT card_data.name,max(card_data.set_order)FROM card_data,   theme_decks WHERE card_data.name ='Mana Leak'和card_data.enabled   = 1 GROUP BY card_data.name ORDER BY card_data.name

(如何制作)

SELECT card_data.name, max(card_data.set_order) FROM card_data, theme_decks  
WHERE card_data.name = ? and
card_data.enabled = 1 GROUP BY card_data.name  ORDER BY card_data.name ASC

$paramArray = array("Mana Leak");
$sth->execute($paramArray);

通过PDO执行大约需要10秒!!然而,如果我通过phpmyadmin运行相同的查询,它只需不到一秒钟..

奇怪的部分是下面这个查询将花费不到一秒但PDO:

SELECT card_data.name, max(card_data.set_order) FROM card_data, theme_decks  WHERE 
(card_data.name = 'Extraplanar Lens' OR card_data.name = 'Mana Leak' OR card_data.name = 
'overgrowth')  and card_data.enabled = 1 GROUP BY card_data.name  ORDER BY card_data.name ASC

(如何制作)

  SELECT card_data.name, max(card_data.set_order) FROM card_data, theme_decks  WHERE 
    (card_data.name = ? OR card_data.name = ? OR card_data.name = 
    ?)  and card_data.enabled = 1 GROUP BY card_data.name  ORDER BY card_data.name ASC

    $paramArray = array("Extraplanar Lens","Mana Leak","overgrowth");
    $sth->execute($paramArray);

我不能为我的生活锻炼为什么搜索单个“名字”需要10秒才能搜索多个名字只需要大约0.4秒......

编辑:情节变粗。我删除了参数化语句并硬编码了要搜索的文本

SELECT card_data.name, max(card_data.set_order) FROM card_data, theme_decks WHERE
card_data.name = Mana Leak and card_data.enabled = 1 GROUP BY card_data.name ORDER BY 
card_data.name ASC

使用PDO进行查询需要0.000384092330933秒!

BUT

SELECT card_data.name, max(card_data.set_order) FROM card_data, theme_decks WHERE
card_data.name = 'Mana Leak' and card_data.enabled = 1 GROUP BY card_data.name ORDER BY 
card_data.name ASC

使用PDO查询需要11.00254秒!!

1 个答案:

答案 0 :(得分:3)

慢通常意味着您需要索引。我发现max()上有card_data.set_order个功能。这意味着您的数据库必须遍历每条记录才能找到最大的记录。

查看该字段是否有索引。如果没有,请添加一个并查看是否可以改善它