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

0 ответов

Другие вопросы по тегам