当我在SQL Server Mgt Studio中执行查询时,我有一个快速运行的查询(1秒),但是当我使用FreeTDS v8,mssql_query()在PHP中运行完全相同的查询(在同一个db instace上)时,它需要很多更长(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 )
;
Run Code Online (Sandbox Code Playgroud)
什么设置打开,通常ARITHABORT是罪魁祸首,它在 SSMS 中打开,但您可能会在连接时将其关闭
在运行查询时在 SSMS 中运行此命令,查看从 PHP 连接的会话的第一列是什么
select arithabort,* from sys.dm_exec_sessions
where session_id > 50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2652 次 |
| 最近记录: |