php中的mysql查询计划与navicat生成的查询计划不同

nc1teljy  于 2021-06-19  发布在  Mysql
关注(0)|答案(0)|浏览(270)

我在发帖的时候很困惑。我不明白为什么当我在php中启动explain与在navicat中为完全相同的查询启动explain时,查询的查询计划是不同的。
查询:

SELECT 
    MAX(`SaleID`) AS 'LatestSaleID',
    MAX(`SaleDate`) AS 'MyLastVisit',
    COUNT(SaleID) AS 'MyNumVisits'                          
FROM sales_table
WHERE sales_table.CustomerID = '5207'

解释navicat中的输出:
身份证-1
选择类型-简单
表-销售表
分区-空
类型-参考
可能的\u密钥-customerid
密钥-customerid
钥匙-22
参考常数
行-1
过滤-100
额外-空
解释从php激发时的输出:
身份证-1
选择类型-简单
表-销售表
分区-空
类型-全部
可能的\u密钥-customerid
键-空
密钥长度-空
参考-空
第1772719行
过滤-10.00
额外使用where
如您所见,explain输出有很大的不同。由于这种差异,从我的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运行查询的时间比mysql客户端长90倍。但是,我还没有找到任何关于查询计划差异的信息。
这是一个遗留应用程序,仍在使用mysql\u查询。
php版本-5.6.34-1+ubuntu16.04.1+deb.sury.org+1
mysqlnd版本-mysqlnd 5.0.11-dev-20120503

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题