Почему производительность LEFT OUTER JOIN плоха на SQL Server CE 3.5? - PullRequest
5 голосов
/ 16 августа 2010

Привет, я попытался выбрать запрос, который содержит левое внешнее соединение на SQL Server CE, и его выполнение занимает около 30 секунд.
, а затем я изменил тот же запрос, чтобы быть внутренним соединением, и он занимает менее 1 секунды.
тот же самый внешний запрос очень быстрый на SQL Server 2008.
кто-нибудь знает, почему это так?
и что является решением этой проблемы с производительностью?
Я думаю о 2 запросах, которые яобъединение, но мне не нравится это решение, на самом деле причина повторения кода.
спасибо

Редактировать:
еще один запрос с низкой производительностью select * from table where item not in (select item from table2)
очень странно, но этот запрос нужендолжен быть изменен на левое внешнее соединение, чтобы производительность была фиксированной

1 Ответ

4 голосов
/ 16 августа 2010

Я нашел проблему
Похоже, что у SQL-сервера CE есть проблемы с оптимизацией внешних объединений.
Таким образом, проблема возникает там, где в одной таблице есть индекс, а в другой нет индекса.
Смотри http://msdn.microsoft.com/en-us/library/ms172984(SQL.100).aspx часть "Ограничение использования внешних соединений"
Было исправлено добавление индекса по внешнему ключу, и была исправлена ​​производительность

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