я выполняю запрос 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 - с константой
План выполнения - запрос №2 - с параметром