Как это переписать в нормализованном виде?
Наверное мы с вами будем зря рассуждать, пока не увидим проблему целиком. Я имел в виду следующий сценарий:
1. На клиенте есть комбобокс со странами которые надо выбрать (множественный выбор)
2. На клиенте есть второй комбобокс со странами которые надо исключить (множественный выбор).
3. После того как вы укажете значения и в том и в другом списках, вы передаете на сервер не названия стран, а ID этих стран как параметры-строки (Искать: 1,2,3; Исключить 4,5)
4. На сервере в запросе, вы первым делом парсите эти строчки в 2 темповые таблицы @T1 и @T2 (1 строчка = 1 ID страны)
5. Делаете сам запрос аля:
PHP:
Select Distinct TC.Name as CustomerName
From Customer_Country as TCC
Join Customer as TC on TC.ID = TCC.CustomerID
Where TCC.CountryID in (select ID from @T1)
and TCC.CountryID not in (select ID from @T2)
Расставив индексы по этим 2 таблицам можно добиться, что этот запрос будет очень быстро работать на любых объемах данных.
А вот ваш запрос, без использования полнотекстового индекса захлебнется при большом количестве данных, так как обычный индекс тут работать не будет.
С одной стороны это довольно банальная задача, но с другой стороны, она просто взрывает мозг, когда сталкиваешься с требованием разработать систему типа Avito.ru. Вроде там все построено на простых справочниках типа Ключ-Значение, но с другой стороны когда в запрос заходит одновременно с десяток параметров типа "Включить в поиск список/Исключить из поиска список" + объявлений в базе пару миллионов + нужно чтобы запрос отдавал данные не более чем за 2-3 сек. вот тут-то и задумываешься как все же умудриться сделать хлопок одной ладонью
))