SQL приведения групп столбцов вместе эффективно - PullRequest
1 голос
/ 16 марта 2012

У меня есть серия запросов T-SQL, которые я использую, которые выполняются очень медленно. Я подозреваю, что одна часть запроса вызывает некоторые проблемы - это серия приведений, которые я должен выполнить для них.

Это проблема. Я должен объединить 4 столбца вместе как nvarchar / varchar, поскольку их комбинация образует (полу) -уникальный ключ для записи в другой таблице (ужасная идея, которую я знаю, но я застрял с ней).

Четыре столбца: t_orno, t_reno, t_pono, t_srnb: все столбцы INT без индексов.

То, как я это делал, выглядит так:

Cast(t_orno AS nvarchar(10)) + '-' + Cast(t_reno as nvarchar(10)) + 
    '-' + Cast(t_pono as nvarchar(5)) + '-' + Cast(t_srnb as nvarchar(5))

К сожалению, я застрял с необходимостью объединить эти столбцы вместе. Есть ли лучший способ сделать это? Запросы должны быть более эффективными, и должен быть лучший способ, чем приведение всех четырех индивидуально?

Предположим, что база данных полностью неизменна - что, к сожалению, это ... (не хочу вдаваться в это ..)

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: В соответствии с запросом дополнительной информации о таблицах:

Обе запрашиваемые таблицы содержат только один индекс, и он находится в столбце PK. Снова обратите внимание, что в этих таблицах ничего нельзя добавить / изменить.

Присоединяемая таблица содержит комбинацию этих четырех столбцов: BaanID> nvarchar, без индекса.

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Вы пробовали обратное, то есть разделение "записи в другой таблице" на символ "-" и приведение каждого к int - может привести к лучшей производительности?

1 голос
/ 16 марта 2012

Я бы попытался использовать постоянное представление и создать для него индекс.Вот статья, которая может вам помочь: http://technet.microsoft.com/en-us/library/cc917715.aspx.

Или вы можете добавить вычисляемый столбец в таблицу, содержащую столбцы t_ *, и проиндексировать этот столбец.

0 голосов
/ 16 марта 2012

Я считаю, что это ключевой момент:

Соединяемая таблица содержит комбинацию этих четырех столбцов: BaanID> nvarchar, без индекса

Если вы не имеете дело с относительно небольшими таблицами, объединение двух таблиц в столбцы, которые не проиндексированы, может быть дорогостоящим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...