Запрос SQL Server Медленный из PHP, но БЫСТРЫЙ из SQL Mgt Studio - ПОЧЕМУ? - PullRequest
5 голосов
/ 22 мая 2010

У меня быстро выполняется запрос (менее 1 секунды), когда я выполняю запрос в SQL Server Mgt Studio, но когда я выполняю точно такой же запрос в PHP (на том же самом хранилище БД), используя FreeTDS v8, mssql_query ()это занимает намного больше времени (70+ секунд).

У таблиц, которые я нажимаю, есть индекс поля даты, которое я использую в предложении Where.

Может быть, это PHPФункции mssql не используют индекс?

Я также пытался поместить запрос в хранимую процедуру, а затем выполнить SP из PHP - такие же результаты с разницей во времени.

У меня естьтакже попытался добавить предложение 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 )
  ;

Ответы [ 3 ]

1 голос
/ 22 мая 2010

какие настройки включены, обычно ARITHABORT является виновником, он включен в SSMS, но вы можете подключаться с ним выключенным

Запустите это в SSMS, пока вы выполняете запрос, и посмотрите, что будетстолбец для сеанса, который подключен из PHP

select arithabort,* from sys.dm_exec_sessions
where session_id > 50
0 голосов
/ 22 мая 2010

Использование СОБЫТИЯ ВХОДА (и СУЩЕСТВУЮЩЕГО СОЕДИНЕНИЯ) в SQL Profiler с колонкой «Текст» покажет параметры подключения для множества важных команд SET - Arithabort, Уровень изоляции, Цитированный идентификатор и другие.Сравните и сопоставьте их между быстрым и медленным соединениями, чтобы увидеть, если что-то выделяется.

0 голосов
/ 22 мая 2010

Запустите SQL Profiler, настройте трассировку и посмотрите, есть ли различия между двумя запусками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...