Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос через Linked server или через openquery к большой таблице  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
С удивлением обнаружил, что
такой запрос работает быстрее
select *
from openquery(MYLINKSRV, 'select f1, f2, f3 from shm.bigtable where f1 >=1');


а такой медленнее
select f1, f2, f3 
from MYLINKSRV..shm.bigtable where f1 >=1


Лучше использовать запрос по варианту 1 или
у меня что-то не так с настройками, и запросы должны выполнятся за одинаковое время?

по факту у меня 1й запрос выполняется меньше секунды, второй я не дождался
p.s. результат выборки 2 строки, в т. > 30м записей
запрос к бд Oracle
____________________________
Копаем отсюда и до обеда ...
24 сен 14, 11:50    [16614805]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104760
А планы сравнить от удивления забыли ?
24 сен 14, 11:53    [16614839]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Glory,

Хороший совет, спасибо помогло, стало чуть понятнее
Для второго варианта в плане появляется CONVERT_IMPLICIT
и как следствие "may affect "SeekPlan" in query plan choice"
Type conversion in expression 
(CONVERT_IMPLICIT(numeric(10,0),[MYLINKSRV]..[shm].[bigtable ].[f1],0)>=(1.)) 
may affect "SeekPlan" in query plan choice


Как с этой конвертацией можно бороться?
24 сен 14, 12:13    [16614954]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104760
Soldat
Для второго варианта в плане появляется CONVERT_IMPLICIT

Разве это единственное отличие ?
24 сен 14, 12:15    [16614969]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Glory,

все остальное по стоимости выполнения несущественно.

или я что-то упустил?

понимаю, что телепатов нет, но может у вас есть предположение, или знание ;)
в чем причина, куда посмотреть?

К сообщению приложен файл. Размер - 15Kb
24 сен 14, 12:38    [16615172]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104760
Soldat
или я что-то упустил?

Разумеется
При openquery запрос выполняется на удаленном сервере
А при MYLINKSRV..shm.bigtable вся таблица качается на локальный сервер и потом только фильтруется
24 сен 14, 12:42    [16615210]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Поправка, еще удаленный запрос во втором случае выполняется без фильтра, а фильтр налагается позднее, на 3м шаге.

Существует возможность приведенный запрос заставить фильтр применять на первом шаге?
или это возможно только через openquery?
select f1, f2, f3 
from MYLINKSRV..shm.bigtable where f1 >=1


К сообщению приложен файл. Размер - 9Kb
24 сен 14, 12:46    [16615254]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Glory
Разумеется
При openquery запрос выполняется на удаленном сервере
А при MYLINKSRV..shm.bigtable вся таблица качается на локальный сервер и потом только фильтруется
Пока писал свою поправку, вы уже ответили, спасибо.

Еще раз уточню, других вариантов нет?
Существует возможность применять фильтр на сервере,
при обращении вида MYLINKSRV..shm.bigtable?
24 сен 14, 12:50    [16615314]     Ответить | Цитировать Сообщить модератору
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104760
Soldat
Существует возможность применять фильтр на сервере,
при обращении вида MYLINKSRV..shm.bigtable?

Для того, чтобы локальный оптимизатор смог перебрать несколько планов с участием удаленного сервера. оптимизатору потребуются права на удаленном сервере для чтения метаданных, статистик распределения и пр.
И разумеется удаленный сервер должен уметь предоставить эти метаданные, статистики и пр.в нужном виде.
24 сен 14, 12:59    [16615381]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запрос через Linked server или через openquery к большой таблице  [new]
учу sql
Guest
Glory
Для того, чтобы локальный оптимизатор смог перебрать несколько планов с участием удаленного сервера. оптимизатору потребуются права на удаленном сервере для чтения метаданных, статистик распределения и пр.
И разумеется удаленный сервер должен уметь предоставить эти метаданные, статистики и пр.в нужном виде.


Glory, а вот такой вопрос. К sql 2008R2 прилинкован sql2012sp3 - если использовать конструкцию типа:

SELECT *
FROM server.db.dbo.table
WHERE column =1

, где server - это удаленный (2012sp3), то план запроса будет строиться на стороне локального 2008R2 ?
18 авг 16, 18:30    [19559776]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить