Я присоединяюсь к таблице десятков разных раз, и каждый раз я присоединяюсь (или фильтрую) на основе результатов СУБСТРИРОВАНИЯ одного из столбцов (это строка, но слева - с нулями и Меня не волнуют последние четыре цифры). В результате, несмотря на то, что этот столбец проиндексирован, и мой запрос будет использовать индекс, он выполняет сканирование таблицы, потому что сам SUBSTRING не индексируется, поэтому SQL Server должен вычислять его для каждой строки раньше, когда он присоединяется.
Я ищу любые идеи о том, как ускорить этот процесс. В настоящее время есть представление о таблице (это "SELECT * FROM", просто чтобы дать таблице дружественное имя), и я рассматриваю возможность добавления столбца к вычисляемому представлению, а затем его индексацию. Я открыт для других предложений, хотя - любые мысли?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я должен был поделить это для начала. Таблица получает репликацию из нашей биллинговой системы, поэтому редактирование базовой таблицы для добавления вычисленного столбца не является вариантом. Любой расчетный столбец должен быть добавлен к представлению в таблице. Кроме того, ведущие нули не всегда являются ведущими нулями - иногда это другие данные, которые меня не интересуют. Я полагаю, что реальный вопрос: " Как я могу присоединиться к данным в середине столбца VARCHAR, также используя индекс? Полнотекстовый поиск?"
Уточнение моего примера Я упрощаю, но по существу, допустим, что я пытаюсь найти значения в столбце со следующими значениями:
00000012345MoreStuff
00000012345Whatever
19834212345
Houses12345837443GGD
00000023456MoreStuff
Мне интересны строки, где SUBSTRING (7,5) = "12345", поэтому мне нужны строки 1-4, но не строка 5. Я предлагаю добавить столбец в мой "SELECT *", который имеет эту подстроку в нем, а затем индексирует на основе этого. Это имеет смысл?