#sql-server-2008
#sql-server-2008
Вопрос:
Я выполняю запрос, который получает некоторые данные с удаленного сервера.
Это простой запрос select, скажем
select * from opendatasource(----).[Database].[dbo].[Table1]
Теперь таблица 1 (имеет 4 столбца) содержит 15 сотен тысяч записей и увеличивается в размере.
На моем сервере, где я получаю результирующий набор запроса, получение данных занимает около 6 секунд. Мне это кажется медленным.
В Table1 есть поле первичного ключа типа данных char (28), и никакой другой индекс любого вида не определен.
Похоже, это проблема.
Какой может быть возможный обходной путь для ускорения работы базы данных?
Помощь приветствуется
Спасибо
Комментарии:
1. Какой источник в
OPENDATASOURCE
?2. Какова сетевая задержка между компьютерами (т. Е. Откуда вы запускаете SQL и сервер БД)?
3. Статистика клиента на сервере показывает следующую выходную сетевую статистику — Количество обходов сервера 1, пакеты TDS, отправленные с клиента 1, пакеты TDS, полученные с сервера 304, Байты, отправленные с клиента 364, байты, полученные с сервера 1243384, Статистика времени Время обработки клиентом 3728, общее время выполнения 5451, время ожидания ответов сервера 1723
4. Вы должны быть в состоянии сократить «время ожидания ответов сервера», переместив клиент ближе к серверу на сетевое расстояние (задержка TCP в обе стороны); для сокращения «времени обработки клиентом» вам нужно будет сузить область возврата результатов только до полей и строк, к которым вы должны запросить.
Ответ №1:
Вы извлекаете целую таблицу. Я не думаю, что вы можете сделать это быстрее.
Если не:
- вы фильтруете количество извлеченных строк (
where
условие) - добавьте индекс, охватывающий ваше
where
условие - ограничить количество возвращаемых полей (
select field1, field2
vsselect *
) - получите более быстрое соединение между клиентом (где бы вы ни запускали скрипт) и сервером