#sql-server
Вопрос:
Изначально здесь задействовано 2 таблицы
col1 — Int Col2 -int
выберите * из таблицы внутренняя таблица 2 в таблице.col1=таблица 2.col2
— Отлично, это даст результат за короткое время в течение 2 минут
Но после изменения col2 на nvarchar(30) выберите * из таблицы внутренняя таблица 2 в таблице.col1=преобразовать(nvarchar(30),table2.col2 )
— он работает больше часа
Любое решение для оптимизации запроса
Комментарии:
1. Добавляя выражение в
WHERE
предложение (илиJOIN
условие, как в данном случае), ваш запрос больше не может быть обработан, и любые индексы становятся бесполезными, что, как вы заметили, эффективно снижает производительность. Либо сохраните обе стороныJOIN
asINT
, либо измените их оба на строки, чтобы в любом случае преобразование не требовалось.
Ответ №1:
Объединение 2 таблиц с помощью nvarchar(30) будет медленнее, чем столбец int, так как он больше. Я бы предпочел использовать int, если это возможно.