разнеси страны и города в разные таблицы...
+1
из урла на страну я достаю уникальную для страны часть, по нему найдя через objurl строку страны получаю ID этой карты, а по нему получаю список городов на ней.
можешь вынести эту уникальную для страны часть в отдельное поле?
я так понимаю это что-то в духе "ru" , "ua", "us", "ee" и т.п.?
если предположение верное, то сравнение на равенство будет выполняться быстрее чем сравнение по like.
т.е. предварительно структура будет выглядеть так
страны - country
pid - автоинкремент - внутренний идентификатор страны.
url - строковый - урл по которому ты искал.
uni_url - уникальная для страны часть урла
города city
pid - автоинкремент
country_id - идентификатор страны в которой расположен город - foreign key на country.pid
name - строковое название города.
потом делаешь запрос вида
select ct.* from city ct join country cnt on ct.country_id=cnt.pid where cnt.uni_url=?
? - значение параметра
можешь поиграться с этим запросом, но работать вроде должен достаточно шустро при наличии индексов по первичному ключу, country_id в таблице городов.
на строковые поля создавать индексы смысла не имеет.
предполагаемое кол-во записей 2000-3000 тысячи. думаете на таком кол-ве записей будет заметно ускорение?
может быть ускорение. в любом случае разделение городов и стран со связкой по ключу, а так же использование индексов позволит снять нагрузку на базу. не за счет скорости ответов, а за счет уменьшения накладных расходов на выполнение запроса.
PS
eugene_kr чуть раньше уже сказал другими словами.
суть в том, чтобы вытянуть из урла подстроку по которой будет выполняться поиск и уложить ее отдельно.