Несовместимые результаты между удаленным и локальным запросом - PullRequest
0 голосов
/ 09 июля 2010

У меня есть интересный случай, когда наборы результатов, возвращаемых SQL Server, различаются в зависимости от того, выполняется ли запрос локально или удаленно.

По сути, если я выполняю следующий запрос:

SELECT p.ID AS Id 
FROM csdb.users.People AS p
LEFT JOIN csdb.users.Accounts AS a ON p.ID = a.IdentityId

затем выполняется левое соединение, и я получаю 633 строки назад.Однако если я удаленно выполню запрос как:

SELECT p.ID AS Id 
FROM quantdb.csdb.users.People AS p
LEFT JOIN quantdb.csdb.users.Accounts AS a ON p.ID = a.IdentityId

, то левое соединение не будет выполнено, будет выполнено сканирование индекса таблицы People и будет возвращено только 564 записи.По сути, кажется, что в удаленном случае оптимизатор говорит: «Ну, вам не нужны никакие столбцы из таблицы« Счета », поэтому я не буду выполнять объединение», тогда как в другом случае он говорит: «Я сделаюобъединение '.

Является ли эта разница в поведении оптимизатора для удаленных и локальных запросов известной «особенностью» SQL Server или это ошибка?

Мы используем SQL Server 2008SP1

1 Ответ

1 голос
/ 10 июля 2010

Отказ от объединения является допустимой оптимизацией, если для Accounts.IdentityId существует уникальное ограничение, поскольку объединение не может добавить ни одной новой строки (неуникальный столбец будет вызывать повторение p.ID для каждого соответствующего дубликата в Аккаунтах.IdentityId).

Можете ли вы опубликовать точную схему таблиц, включая все индексы и ограничения?Я хочу посмотреть, если он обличает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...