【发布时间】:2012-05-26 00:16:43
【问题描述】:
我在 php 中使用 PDO for Mysql 遇到了一个非常奇怪的问题。
我有一张大约有 30,000 行的表格。
如果我尝试运行此查询:
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
(如何制作)
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 秒!!
但是
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 秒!!
【问题讨论】:
-
你的表 card_data.name 里面有没有字段?
-
对不起,我不明白你的意思?该字段是表card_data中的名称
-
只是出于兴趣,如果您将查询存储在存储过程中并通过 PDO 和 PHPMyAdmin 运行,您会得到相同的延迟吗?
-
好问题。我会找出答案的!
-
既然你只使用了一张表 card_data 那么你为什么要通过再次引用来混淆它,它的名字来自 card_data 就足够了! D: