Главное, чтобы иметь в виду при выполнении поиска с помощью строки является то, что вы хотите чтобы ограничить длину строки, которую вы просматриваете. Прямо сейчас у вас есть несколько значений path + filename, заправленных в одну пару столбцов строки. Как я уже упоминал выше, это плохо нормировано (и является частью причины, по которой у вас возникают проблемы с поиском).
Учитывая, что вы не можете изменить схему таблицы, с которой вы столкнулись, лучшей альтернативой может быть создание структуры для работы с метаданными, которые описывают файлы, хранящиеся в определенной строке.
Например, один из вариантов может быть, чтобы создать таблицу, содержащую filename
- rowID
пар, где каждая строка исходной таблицы связывается с проанализированных-аут имен файлов в TEXT
столбце этой строки. Это дает вам возможность ограничить поиск, сначала сделав поиск по более короткой строке (filename
), а затем используя это ограничение, чтобы помочь выполнить поиск меньшего количества строк, чтобы удовлетворить комбинацию пути + имя файла и добиться уникального результата.
Если у вас есть большое количество файлов с одинаковыми именами, другой вариант может заключаться в реализации хэш-индекса, используя rowID
s из вашей исходной таблицы и хэш каждого пути + имя файла из этой строки, используя CHECKSUM()
или любую функцию хеширования у вас есть.
Использование таблицы индексирования, подобной этой, добавляет накладные расходы: вам необходимо поддерживать метаданные по мере обновления исходной таблицы, но это также означает, что вы делаете свой тяжелый взнос досрочно и делаете будущие запросы данных намного быстрее.
Какая версия MSSQL?2008, 2005, 2000, 7 – RThomas
Приложение работает под MSSQL 2000 (я знаю, это старый). Я знаю, что у нас также есть поле 2005 года, возможно, мы можем переместить базу данных на этот сервер, но я не уверен в этом. Прямо сейчас, я думаю, мне придется иметь дело с MSSQL 2000 :( –
Некоторые из этого немного неясны: вы храните несколько имен файлов в одной строке столбца строки, правильно? – lyrisey