【问题标题】:SQL Server Query Slow from PHP, but FAST from SQL Mgt Studio - WHY?SQL Server 从 PHP 查询慢,但从 SQL Mgt Studio 查询快 - 为什么?
【发布时间】:2010-05-22 01:38:39
【问题描述】:

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

【问题讨论】:

  • Ray,您是否发现问题所在以及如何解决?我在 SQLyog 中运行快速的 MySQL 查询和使用 mysql_query 从 PHP 运行缓慢的 MySQL 查询遇到了类似的问题...
  • 我遇到了同样的问题。唯一的区别是我使用的是codeigniter。当您对此有解决方案时,请告诉我。谢谢

标签: php sql-server


【解决方案1】:

开启了哪些设置,通常ARITHABORT 是罪魁祸首,它在 SSMS 中是开启的,但您可能会关闭它

在运行查询时在 SSMS 中运行它,查看从 PHP 连接的会话的第一列是什么

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

【讨论】:

  • 您好,感谢您的回答。我有个问题。我设置它并且我的查询现在运行得非常快,但是当我运行您推荐的查询时,它仍然显示 arithabort 在 PHP 连接上已关闭(即使查询现在运行得非常快)您知道它为什么会这样做吗?
【解决方案2】:

运行 SQL Profiler,并设置跟踪并查看两次运行之间是否存在任何差异。

【讨论】:

    【解决方案3】:

    使用 SQL Profiler 中的 LOGIN EVENT(和 EXISTING CONNECTION)与 Text 列将显示许多重要 SET 命令的连接设置——Arithabort、隔离级别、引用标识符等。在快速和慢速连接之间进行比较和对比,看看是否有什么突出的地方。

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多