В настоящее время я работаю с относительно большой базой данных SQL Server 2000.Он имеет размер 80 ГБ и содержит миллионы и миллионы записей.
Мне нужно вернуть список имен, который содержит хотя бы один из ряда недопустимых символов.Под недопустимыми символами подразумевается произвольный список символов, который определяется заказчиком.В приведенном ниже примере я использую вопросительный знак, точку с запятой, точку и запятую в качестве списка недопустимых символов.
Сначала я хотел создать функцию CLR, которая работала бы с регулярными выражениями, но в качестве SQL Server 2000,Я думаю, что это не может быть и речи.
На данный момент я сделал так:
select x from users
where
columnToBeSearched like '%?%' OR
columnToBeSearched like '%;%' OR
columnToBeSearched like '%.%' OR
columnToBeSearched like '%,%' OR
otherColumnToBeSearched like '%?%' OR
otherColumnToBeSearched like '%;%' OR
otherColumnToBeSearched like '%.%' OR
otherColumnToBeSearched like '%,%'
Теперь я ни в коем случае не эксперт по SQL, но у меня такое ощущение, что приведенный выше запрос будет оченьнеэффективен.Выполнение 8 множественных поисков по шаблону в таблице с миллионами записей, похоже, может серьезно замедлить работу системы.Хотя на тестовых серверах это работает нормально, я чувствую, что «это должно быть совершенно неправильно».
Поскольку мне нужно в конечном итоге выполнить этот скрипт на живом производственном сервере, я надеюсь достичь хорошей производительностичтобы не засорять систему.Возможно, позже потребуется расширить скрипт, чтобы включить в него больше недопустимых символов, но это очень маловероятно.
Подводя итог: моя цель - получить список записей, где любой из двух столбцов содержит определенный пользователем "недопустимый символ".База данных живая и обширная, поэтому я хочу использовать несколько более эффективный подход, так как считаю, что приведенные выше запросы будут выполняться очень медленно.
Может кто-нибудь сказать мне, как лучше всего достичь моего результата?Спасибо!
/ Мортен