PHPでMysqlにPDOを使用すると、本当に奇妙な問題が発生します。
約30,000行のテーブルがあります。
このクエリを実行しようとすると、次のようになります。
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
(作り方)
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で同じクエリを実行すると、1秒もかかりません。
奇妙な部分は、以下のこのクエリがPDOを介して1秒未満かかることです。
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);
複数の名前を検索するのに約0.4秒しかかからないのに、1つの「名前」を検索するのに10秒かかるのはなぜですか。
編集:プロットが厚くなります。パラメータ化されたステートメントを削除し、検索するテキストをハードコーディングしました
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秒かかります!!