この質問について非常に遅れた更新を与える:
原因はわかりませんが、PHPとCLIではEXPLAINが異なっていたことがわかりました。接続のいずれかの側面により、MySQLがインデックスに別のフィールドを使用することを選択するかどうかはわかりません。これは、私が知る限り、これらの項目は関連してはならないためです。しかし残念ながら、PHPのEXPLAINは、CLIが使用しているのに、適切なインデックスが使用されていないことを示しました。
この(不可解な)場合の解決策は、インデックスヒントを使用することです。 。私の例からのこの変更されたクエリの「FROM」行を参照してください:
SELECT HEX(al.uuid) hexUUID, al.created_on,
IFNULL(al.state, 'ON') actionType, pp.publishers_id publisher_id,
pp.products_id product_id, al.action_id, al.last_updated
FROM ActionAPI.actionLists al USE INDEX (created_on)
LEFT JOIN ActionAPI.publishers_products pp
ON al.publisher_product_id = pp.id
WHERE (al.test IS NULL OR al.test = 0)
AND (al.created_on >= :since OR al.last_updated >= :since)
ORDER BY created_on ASC
LIMIT :skip, 100;
これが誰かに役立つことを願っています!