Повышение производительности запросов

#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 as INT , либо измените их оба на строки, чтобы в любом случае преобразование не требовалось.

Ответ №1:

Объединение 2 таблиц с помощью nvarchar(30) будет медленнее, чем столбец int, так как он больше. Я бы предпочел использовать int, если это возможно.