Я довольно смущен во время публикации этого.
Я не понимаю, почему план запроса для запроса отличается, когда я запускаю EXPLAIN в php против запуска EXPLAIN для EXACT того же запроса в navicat.
Запрос:
SELECT
MAX(`SaleID`) AS 'LatestSaleID',
MAX(`SaleDate`) AS 'MyLastVisit',
COUNT(SaleID) AS 'MyNumVisits'
FROM sales_table
WHERE sales_table.CustomerID = '5207'
Объясните вывод в Navicat:
Объясните вывод при запуске из PHP:
Как видите, вывод объяснения сильно отличается. Из-за этой разницы запрос выполняется в 4 раза дольше с моей страницы PHP.
Я пытался использовать принудительный индекс. Однако это тоже не сработало.
SELECT
MAX(`SaleID`) AS 'LatestSaleID',
MAX(`SaleDate`) AS 'MyLastVisit',
COUNT(SaleID) AS 'MyNumVisits'
FROM sales_table USE INDEX(CustomerID)
WHERE sales_table.CustomerID = '5207'
Я нашел соответствующий пост — PHP выполняет запрос в 90 раз дольше, чем клиент MySQL. Однако мне не удалось найти какую-либо информацию относительно различий в плане запросов.
Это устаревшее приложение, которое все еще использует mysql_query.
Задача ещё не решена.
Других решений пока нет …