У меня есть этот простой запрос на SQL Server 2008 R2:Почему этот запрос использует два сканирования таблицы?
SELECT Art.ID_Articulo,
conv.Factor AS PesoToneladas
FROM dbo.Articulos Art
LEFT JOIN dbo.Conversiones conv
ON conv.ID_Articulo = Art.ID_Articulo
AND conv.ID_Unidad1 = Art.ID_Unidad
Таблица Articulos
индексируемой индивидуально ID_Articulo
и ID_Unidad
. Таблица Conversiones
индексируется по отдельности ID_Articulo
и ID_Unidad1
.
Планы выполнения показывают сканирование таблицы для обеих таблиц, занимающих много ресурсов.
Как я могу найти причину?
У вас есть индексы на столбцах, к которым вы присоединяетесь? –
Нам нужно будет увидеть обе таблицы, скриптовые (включая индексы). –
Из того, что я знаю, оптимизатор также предпочитает выполнять сканирование таблицы вместо поиска индекса (даже если есть индекс в этом столбце), если объем данных, которые будут извлечены, будет очень большим (поскольку один «объемный» доступ данных будет быстрее, чем индивидуально извлекать каждую строку). Таким образом, это зависит от количества данных, которые должен вернуть запрос. –