SQL создает обратный столбец в огромную таблицу

У меня есть огромная таблица (миллиарды строк) в моей базе данных, которая находится в простой модели восстановления, и мне нужно создать обратный индекс для одного столбца.

Каков самый быстрый способ сделать это?

Очевидный способ слишком медленный и очень широко использует файлы журналов:

ALTER TABLE MyTable 
    ADD COLUMN Reverse_Column1 nvarchar(50);

UPDATE MyTable 
SET Reverse_Column1 = REVERSE(Column1);

CREATE INDEX idx_Reverse_Column1 ON MyTable (Reverse_Column1);

Большое спасибо!

Нет, это не очевидно, как вы сказали, вам нужен этот индекс, и поэтому вы должны жить с ним

nbk 20.11.2022 11:00

У вас уже есть индекс на Column1? Если да, то не могли бы вы просто изменить искомый текст в ваших SQL-запросах, чтобы использовать этот существующий индекс?

marc_s 20.11.2022 11:11

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

Stu 20.11.2022 11:24

@marc_s Мне нужен обратный индекс для быстрого поиска окончания строки ('%searchValue')

rotem 20.11.2022 13:06

Даже если бы у вас был индекс - поиск %searchValue НИКОГДА не сможет его использовать .....

marc_s 20.11.2022 14:56

Однако поиск eulaVhcraes% в индексированном перевернутом столбце....

Stu 20.11.2022 17:06

@marc_s, как сказал Стю, я могу искать обратное окончание строки, и это будет использовать обратный индекс

rotem 21.11.2022 09:07
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный
JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы,...
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Подъем в javascript
Подъем в javascript
Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих...
Улучшение генерации файлов Angular
Улучшение генерации файлов Angular
Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.
1
7
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вам нужно найти Column1 строки, оканчивающиеся суффиксом, индекс на Column1 вам не поможет.

Однако нет необходимости добавлять этот столбец в строки страницы данных и выполнять для этого все журналы. Вы можете добавить его как несохраняемый вычисляемый столбец (только метаданные).

ALTER TABLE MyTable 
    ADD Reverse_Column1 as REVERSE(Column1);

Когда вы создаете для него индекс, значения сохраняются только в индексе.

CREATE INDEX idx_Reverse_Column1 ON MyTable (Reverse_Column1);

Это повлечет за собой некоторую регистрацию, но это неизбежно. Вы можете создать индекс ONLINE, если вы используете версию, поддерживающую это, чтобы уменьшить блокировку таблицы на время операции.

Это как раз моя мотивация но моя проблема с обновлением огромной таблицы

rotem 21.11.2022 09:13

@rotem - этот ответ не предполагает, что вы обновляете огромную таблицу. Однако вам нужно будет создать для него индекс, но это неизбежно, поскольку вы не можете создать индекс без создания индекса.

Martin Smith 21.11.2022 12:27

Под обновлением я подразумеваю создание обратного столбца, что является длительной операцией. я пытаюсь обновить/создать обратный столбец партиями..

rotem 21.11.2022 13:39

@rotem - создание обратного столбца в качестве непостоянного вычисляемого столбца, как это предлагается в моем ответе, является изменением только метаданных. Так что, по сути, вы делаете что-то совершенно отличное от того, что я предлагаю, а потом ноете мне об этом.

Martin Smith 21.11.2022 13:40

Большое спасибо! в начале я не заметил, что вы предлагаете делать вычисляемый столбец, теперь я создал несохраняемый вычисляемый столбец и проиндексировал его, и он отлично работает!

rotem 22.11.2022 15:32

Другие вопросы по теме