Как я могу изменить тайм-аут php curl, когда curl пытается разрешить хост (curl err_no 6)

я выполняю запрос curl к странице. Я установил CURLOPT_TIMEOUT (до 6 секунд) и CURLOPT_CONNECTTIMEOUT (до 4 секунд) - и оба отлично работают для большинства URL.

Однако, когда веб-страница не отвечает (и, наконец, вызывает CURL через ' Не удалось разрешить ошибку хоста (err_no 6)) - кажется, что CURLOPT_TIMEOUT не действует, и curl будет ждать,

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

Запрос №1 - с константа

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS Data, 0 AS Depth
  FROM Test
  UNION ALL
  SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
  FROM Hierarchy h
       INNER JOIN Test t ON t.Id = h.ParentId
)
SELECT *
FROM Hierarchy
WHERE Id = 69

Запрос №2 - с параметром

DECLARE @Id INT
SELECT @Id = 69

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS Data, 0 AS Depth
  FROM Test
  UNION ALL
  SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
  FROM Hierarchy h
       INNER JOIN Test t ON t.Id = h.ParentId
)
SELECT *
FROM Hierarchy
WHERE Id = @Id

В случае таблицы с 50 000 строками запрос с константой выполняется в течение 10 миллисекунд, а запрос с параметром - в течение 30 секунд (в 3000 раз медленнее).

Это не вариант для перемещения последнего предложения WHERE в определение привязки рекурсии, поскольку я хотел бы использовать запрос для создания представления (без последнего WHERE ). Выбор из представления будет иметь предложение WHERE ( WHERE Id = @Id ) - мне это нужно из-за Entity Framework, но это уже другая история. Я использую SQL 2008 R2.

Заранее благодарим вас за помощь!

План выполнения - запрос №1 - с константой

alt text

План выполнения - запрос №2 - с параметром

alt text

11
задан Zoltan 20 November 2010 в 09:35
поделиться