У меня есть небольшая проблема с T-SQL, я в основном нахожусь в состоянии, когда мне нужно выполнить целую кучу запросов, таких как:
SELECT TOP 30 * FROM [table]
WHERE firstfield IS NOT NULL
AND secondfield IS NOT NULL
AND (firstfield LIKE '%substring%' OR secondfield LIKE '%substring%')
Это выполняется из программы на C # .NET с таймаутом на SqlCommand
, установленным на 90 секунд, и для большинства запросов (которые ищут редкие или несуществующие термины) он достигает тайм-аута.
Проблема с этим, конечно, в том, что он очень медленный, но данные нужно выбирать. После выборки все возвращенные значения firstfield
и secondfield
просто объединяются (эта более крупная строка сохраняется и анализируется программой).
В настоящее время я запускаю это на своем рабочем ноутбуке, поскольку рабочий сервер, на котором эти данные слишком сильно замедляется, при выполнении тысяч таких запросов. При работе на рабочем сервере я получаю результаты примерно в 30% случаев, а на моем ноутбуке (с 4 ГБ ОЗУ и обычным 2,5-дюймовым жестким диском с вращающейся ржавчиной) он приближается к 10%.
Итак, есть ли какой-нибудь способ для меня ускорить это или я лучше всего могу просто увеличить время ожидания и оставить его включенным на несколько недель, пока оно не закончится? Я рассмотрел просто создание программы извлечения данных, которая просто выводит результаты в отдельную таблицу следующим образом:
CREATE TABLE(
id INT NOT NULL PRIMARY KEY IDENTITY,
keyword VARCHAR(255) NOT NULL,
returneddata VARCHAR(MAX), -- Or possibly a TEXT field.
)
Таким образом, я мог оставить запущенную программу считывателя и просто сделать так, чтобы моя основная программа запросила эту таблицу. Но, честно говоря, я бы предпочел просто найти способ заставить запросы выполняться быстрее (или другой способ выполнения запросов). Я просто очень надеюсь, что я дурачок и что я упустил какой-то очевидный способ сделать это быстрее ...