Главное, что нужно иметь в виду при выполнении поиска по строке, это то, что вы хотите ограничить длину строки, по которой вы ищете. Прямо сейчас у вас есть несколько значений path + filename, спрятанных в одну пару строка-столбец - как я уже упоминал выше, это плохо нормализовано (и это одна из причин, по которой у вас возникают проблемы при поиске).
Учитывая, что вы действительно не можете изменить схему таблицы, с которой у вас возникают проблемы, лучшей альтернативой может быть создание структуры для работы с метаданными, описывающими файлы, хранящиеся в определенной строке.
Например, одним из вариантов может быть создание таблицы, содержащей пары filename
- rowID
, где каждая строка исходной таблицы связана с проанализированными именами файлов в столбце TEXT
этой строки. Это дает вам возможность ограничить ваш поиск, сначала выполнив поиск по более короткой строке (filename
), а затем используя это ограничение, чтобы помочь искать меньшее количество строк, чтобы удовлетворить комбинацию путь + имя файла и достичь уникального результата. .
Если у вас большое количество файлов с одинаковыми именами, другой вариант может заключаться в реализации хэш-индекса с использованием rowID
s из исходной таблицы и хэша каждого пути + имени файла из этой строки с использованием CHECKSUM()
или какая бы у вас ни была функция хеширования.
Использование таблицы «индексации», подобной этой, увеличивает издержки: вы должны поддерживать метаданные по мере обновления исходной таблицы, но это также означает, что вы выполняете тяжелую работу заблаговременно и выполняете будущие запросы данных намного быстрее.