Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск строкового значения в поле с возможными пробелами  [new]
учет_пробелов
Guest
В таблице ~30млн. записей.

Поиск идет по полю Name.

Идет следующим образом:
SELECT *
FROM Table1 t1
JOIN Clients c ON (ltrim(rtrim(t1.CompanyName)) = ltrim(rtrim(c.Name1)))


Сам по себе поиск очень долгий т.к. происходит полное сканирование таблицы.

Вот на примере эксперементирую:
DECLARE @A TABLE (A VARCHAR(160))
INSERT INTO @A
SELECT '1'
UNION ALL
SELECT '1 '
UNION ALL
SELECT ' 1'
UNION ALL
SELECT ' 1 '
UNION ALL
SELECT '  1  '


Как оптимальнее написать выборки, которые выберут все записи, в которых есть содержание значение "1", но возможно в начале или в конце будут пробелы?

Можно подобные действия переписать с помощью LIKE ?
4 май 16, 11:38    [19132644]     Ответить | Цитировать Сообщить модератору
 Re: Поиск строкового значения в поле с возможными пробелами  [new]
Glory
Member

Откуда:
Сообщений: 104751
учет_пробелов
Как оптимальнее написать выборки, которые выберут все записи, в которых есть содержание значение "1", но возможно в начале или в конце будут пробелы?


а '111111' это тоже ", в которых есть содержание значение "1"" ?


учет_пробелов
Можно подобные действия переписать с помощью LIKE ?

Можно
4 май 16, 11:41    [19132659]     Ответить | Цитировать Сообщить модератору
 Re: Поиск строкового значения в поле с возможными пробелами  [new]
учет_пробелов
Guest
Glory
а '111111' это тоже ", в которых есть содержание значение "1"" ?

нет.

Поиск должен быть таким <пробелы есть или нет>+значение+<пробелы есть или нет>
4 май 16, 11:45    [19132682]     Ответить | Цитировать Сообщить модератору
 Re: Поиск строкового значения в поле с возможными пробелами  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
учет_пробелов
Glory
а '111111' это тоже ", в которых есть содержание значение "1"" ?

нет.

Поиск должен быть таким <пробелы есть или нет>+значение+<пробелы есть или нет>



а с чего вы взяли, что у вас в конце пробелы будут?
select a.A, LEN(a.A) from @A a
4 май 16, 11:47    [19132695]     Ответить | Цитировать Сообщить модератору
 Re: Поиск строкового значения в поле с возможными пробелами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
О хвостовых пробелах можно не беспокоиться - они и так отбрасываются.
Возможно, надо сделать вычисляемое поле, равное LTRIM(CompanyName), и проиндексировать его.
То же самое с Name1.
Тогда можно будет связывать по этим вычисляемым полям в надежде, что индексы будут задействованы.
Ибо LIKE '%<нечто>' всё равно приведёт к скану.
4 май 16, 11:50    [19132730]     Ответить | Цитировать Сообщить модератору
 Re: Поиск строкового значения в поле с возможными пробелами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Кстати, а нельзя лидирующие пробелы сразу отрубать при вставке?
Раз они только мешают.
4 май 16, 14:58    [19133843]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить