PHP的SQL Server查询速度慢,但SQL Mgt Studio的查询速度快-为什么?

zpgglvta  于 2022-11-21  发布在  PHP
关注(0)|答案(4)|浏览(156)

当我在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 )
  ;
ryoqjall

ryoqjall1#

什么设置是打开的,通常ARITHABORT是罪魁祸首,它在SSMS中是打开的,但您可能在关闭它的情况下连接
在运行查询的同时,在SSMS中运行此命令,查看从PHP连接的会话的第一列是什么

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

5lhxktic2#

运行SQL事件探查器,并设置跟踪,查看两次运行之间是否有任何差异。

sc4hvdpw

sc4hvdpw3#

在SQL事件探查器中使用LOGIN EVENT(和EXISTING CONNECTION)和Text列将显示许多重要SET命令的连接设置--Arithabort、Isolation Level、Quoted Identifier等。比较快速连接和慢速连接之间的这些设置,以查看是否有什么突出的地方。

jq6vz3qz

jq6vz3qz4#

SET ARITHABORT ON;,可能会提高查询性能。
https://learn.microsoft.com/en-us/sql/t-sql/statements/set-arithabort-transact-sql?view=sql-server-ver16
在登录会话中始终将ARITHABORT设置为ON.将ARITHABORT设置为OFF可能会对查询优化产生负面影响,从而导致性能问题.

相关问题