Я присоединяюсь к столу A
против таблиц B
и C
.Все три таблицы имеют одинаковые столбцы и индексы, а B
и C
имеют примерно одинаковое количество строк.Но A
и B
имеют индексы для столбцов nvarchar
, в то время как C
имеет индексы для столбцов varchar
.
Тестируется отдельно, объединение в B
происходит в 30-60 раз быстрее, чем присоединение вC
.(4 секунды против 2-4 минут.) Глядя на план выполнения, B
использует поиск по индексу, а C
использует сканирование по индексу.В деталях для объединения в C
упоминается неявное преобразование столбцов varchar
, в то время как в объединении в B
такое преобразование не упоминается. Вот почему он использует сканирование вместо поиска, и, возможно, поэтому он так медленен? (Другая потенциальная проблема: сканирование индекса на C
имеет приблизительное число выполнений 1, нофактическое количество выполнений составляет около 8500.)
C
- это статические хронологические данные, поэтому я могу изменить столбцы и перестроить индексы, если это поможет.