powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Организация поиска в MSSQL2K (varchar)
6 сообщений из 6, страница 1 из 1
Организация поиска в MSSQL2K (varchar)
    #32056779
VaaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет All.
Например есть такая таблица
Код: plaintext
1.
2.
CREATE TABLE Texts
       (T_ID		BIGINT IDENTITY( 1 , 1 ) PRIMARY KEY CLUSTERED,
	TD_Text		VARCHAR( 8000 ))


Насколько оправданым будет использование функции

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE FUNCTION fn_Search (@PText VARCHAR( 8000 ), @PWord VARCHAR( 256 ))
RETURNS INT
BEGIN
	DECLARE @PResult INT
	DECLARE @PI INT
	DECLARE @PLen INT
	DECLARE @Pos INT
	SET @PResult =  0 
	SET @PI =  0 
	SET @PLen = LEN(@PText)
	IF @PLen <  1 
		RETURN @PResult
	WHILE @PI <= @PLen
	BEGIN
		SET @Pos = CHARINDEX(@PWord, @PText, @PI)
		IF @Pos <>  0  
		BEGIN
			SET @PResult = @PResult +  1 
			SET @PI = @Pos +  1 
		END
		ELSE
			BREAK
	END
	RETURN @PResult
END
GO


Если проводится запрос типа (Ищем по всей таблице в поле TD_Text слово "something" и выводим Primary Key ID записей с найденым словом в порядке убывания количества вхождений этого слова в поле TD_Text):

Код: plaintext
1.
2.
SELECT T_ID, (SELECT dbo.fn_Search(TD_Text, 'something')) AS Res FROM Texts
WHERE (SELECT dbo.fn_Search(TD_Text, 'something')) >  0 
ORDER BY Res DESC


Насколько такой подход хорош, есть ли более быстрые варианты реализации сабжа?
Поделитесь идеями.
Спасибо
...
Рейтинг: 0 / 0
Организация поиска в MSSQL2K (varchar)
    #32056791
VaaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция пробегает по полю TD_Text и подщитывает количество входов слова переданого ей 2-ым параметром.
Если кто организовывал поиск... поделитесь опытом...
если не жалко :)
...
Рейтинг: 0 / 0
Организация поиска в MSSQL2K (varchar)
    #32056794
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего подобного не делал, но мне кажется, что ставить вызов функции в условие WHERE - очень большая расточительность. Обычный LIKE там больше уместен.
...
Рейтинг: 0 / 0
Организация поиска в MSSQL2K (varchar)
    #32056796
VaaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот тоже против LIKE ничего не имею, но как тогда узнать что в одной записи слово для поиска встречается 100 раз а в другой 10 раз? Потому как результат еще и сортировать надо...
...
Рейтинг: 0 / 0
Организация поиска в MSSQL2K (varchar)
    #32056800
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
SELECT T_ID, (SELECT dbo.fn_Search(TD_Text, 'something')) AS Res FROM Texts
WHERE (SELECT dbo.fn_Search(TD_Text, 'something')) >  0 
ORDER BY Res DESC

функция вызывается дважды для всех строк в таблице.

Код: plaintext
1.
2.
SELECT T_ID, (SELECT dbo.fn_Search(TD_Text, 'something')) AS Res FROM Texts
WHERE TD_Text LIKE '%something%'
ORDER BY Res DESC

функция вызывается один раз только для тех строк, где подстрока присутствует.

Результаты абсолютно одинаковые.
...
Рейтинг: 0 / 0
Организация поиска в MSSQL2K (varchar)
    #32056804
VaaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стыдно мне )))...
Действительно Execution Plan смотрится намного милее моему взгляду...
Благодарствую.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Организация поиска в MSSQL2K (varchar)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]