当我在SQL Server Mgt Studio中执行查询时,我有一个快速运行的查询(不到1秒),但是当我在PHP中(在相同的数据库实例上)运行完全相同的查询时,
使用FreeTDS v8 mssql_query(),它需要更长的时间(超过70秒)。

我要击中的表在Where子句中使用的日期字段上有一个索引。

难道是PHP的mssql函数没有利用索引吗?

我还尝试过将查询放入存储过程中,然后从PHP执行SP-在时间上会发生相同的结果。

我也尝试过在具有日期索引的表上添加WITH(INDEX(..))子句,但也没有运气。

这是查询:

SELECT
        1 History,
        h.CUSTNMBR CustNmbr,
        CONVERT(VARCHAR(10), h.ORDRDATE, 120 ) OrdDate,
        h.SOPNUMBE OrdNmbr,
        h.SUBTOTAL OrdTotal,
        h.CSTPONBR PONmbr,
        h.SHIPMTHD Shipper,
        h.VOIDSTTS VoidStatus,
        h.BACHNUMB  BatchNmbr,
        h.MODIFDT ModifDt

  FROM  SOP30200 h
        WITH (INDEX (AK2SOP30200))
  WHERE
        h.SOPTYPE = 2 AND
        h.DOCDATE >= DATEADD(dd, -61, GETDATE()) AND
        h.VOIDSTTS = 0 AND
        h.MODIFDT = CONVERT(VARCHAR(10), DATEADD(dd, -1*@daysAgo, GETDATE()) , 120 )
  ;

最佳答案

什么设置是打开的,通常ARITHABORT是元凶,在SSMS中它是打开的,但是您可能正在关闭它

在运行查询时,在SSMS中运行此命令,然后查看从PHP连接的 session 的第一列是什么

select arithabort,* from sys.dm_exec_sessions
where session_id > 50

关于php - PHP的SQL Server查询速度很慢,但是SQL Mgt Studio的SQL Server查询速度却很快-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2886592/

10-12 12:40
查看更多