Это мои таблицы:Как улучшить производительность на большом левом внешнем соединении?
Source_Artikelen - столбцы: статья - описание (1.438.171 записей)
Source_LevArt - столбцы: статья - производитель номер детали (1.751.801 записей)
... и это запрос я выступаю
SELECT a.Artikel,a.Omschrijving, l.Artikel_Leverancier
FROM Source_Artikelen AS a
LEFT OUTER JOIN Source_LevArt AS l
ON a.Artikel Like l.Artikel
Этот запрос был запущен сегодня Ф.О. r более чем за 20 часов до того, как я отменил его вручную.
Итак, что я пытаюсь сделать?
Я хочу перечислить все статьи из моей таблицы Source_Artikelen. Тогда я хотел бы посмотреть, есть ли номера деталей производителя, доступные в Source_LevArt.
- не каждая статья из Source_Artikelen присутствует в Source_LevArt
- иногда есть несколько номеров производитель деталей в Source_LevArt одной статьи
Вот почему мне нужно использовать ЛЕВЫЙ ВНУТРЕННИЙ ВСТУПИТЕЛЬ.
Я пробовал некоторые вещи с индексами, но это не очень помогает. Возможно, я что-то делаю неправильно.
Я действительно могу использовать некоторую помощь, так как это только начало запроса, который я пишу. мне придется добавить 2 другие (большие) сухотке как левое внешнее соединение позже ...
UPDATE 19/12/2016 16:24: Привет piet.t
SELECT TOP(20) a.Artikel,a.Omschrijving, l.Artikel_Leverancier
FROM Source_Artikelen AS a
LEFT JOIN Source_LevArt AS l
ON a.Artikel LIKE l.Artikel
это занимает 9 секунд
SELECT TOP(20) a.Artikel,a.Omschrijving, l.Artikel_Leverancier
FROM Source_Artikelen AS a
LEFT JOIN Source_LevArt AS l
ON a.Artikel = l.Artikel
требуется 1 секунда!
Я действительно не знал, что есть разница, поскольку я не использую подстановочные знаки.
Source_Artikelen .Artikel первичный ключ и Source_LevArt.Artikel внешний ключ? вы также можете указать как «И» после «ВКЛ» (нет предложения where) «И« Номера деталей изготовителя »не являются нулевыми. заменяя то, что цитируется полем, содержащим номера деталей. (предполагая, что некоторые могут быть пустыми для записей в source_levArt.Тогда должно произойти, что фильтр применяется ко второй таблице до того, как произойдет соединение, уменьшив количество записей, к которым должен присоединиться запрос. – xQbert
Первое, что я хотел бы сделать, это избавиться от 'like' в условии соединения, поскольку вам кажется, что вам нужны только точные соответствия, поэтому попробуйте' ON a.Artikel = l.Artikel' и посмотрите, ускоряет ли это , –
@ vlatro «Я действительно не знал, что есть разница, поскольку я не использую подстановочные знаки». Вы знаете это, но SQL-процессор не работает, так как может быть '' '' '' '' '' 'скрыта в содержимом' l.Artikel' –