Mysql Query Plan отличается в PHP по сравнению с Query Plan, созданным через Navicat
Я довольно смущен во время публикации этого. Я не понимаю, почему план запроса для запроса отличается, когда я запускаю 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:
- id - 1
- select_type - SIMPLE
- таблица - sales_table
- перегородки - NULL
- тип - ссылка
- Возможные_клиенты - CustomerID
- ключ - CustomerID
- key_len - 22
- ref - const
- ряды - 1
- отфильтрованный - 100
- Extra - NULL
Объясните вывод при запуске из PHP:
- id - 1
- select_type - SIMPLE
- таблица - sales_table
- перегородки - NULL
- тип - ВСЕ
- Возможные_клиенты - CustomerID
- ключ - NULL
- key_len - NULL
- ref - NULL
- строки - 1772719
- отфильтрованный - 10,00
- Extra - Использование где
Как видите, результат объяснения сильно отличается. Из-за этой разницы запрос выполняется с моей страницы PHP в 4 раза дольше.
Я пытался использовать принудительный индекс. Однако это тоже не сработало.
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.
- Версия PHP - 5.6.34-1+ubuntu16.04.1+deb.sury.org+1
- Версия MySQL - mysqlnd 5.0.11-dev - 20120503