Arvind Singh Baghel Ответов: 1

Как сделать быстрый поиск для столбца 8000 символов в SQL server


привет
у меня есть таблица продуктов, в которой есть несколько столбцов, таких как id, имя, цена и описание
столбец описания-это столбец с 8000 символами.
если я использую поиск в столбце описания, он будет медленным. например, описание типа %baby product%
я могу реализовать полный тестовый поиск, но мне нужен какой-то другой способ для этого.
не могли бы вы указать на некоторые решения этой проблемы (даже мы можем изменить структуру базы данных и таблицы).
я хочу быстро получить данные запроса с условием в столбце описания.
Спасибо.

Что я уже пробовал:

полный тестовый поиск..............................................

pradiprenushe

попробуйте индексировать столбец

1 Ответов

Рейтинг:
1

CHill60

Если у вас есть несколько описаний наборов, то вместо того, чтобы иметь один большой столбец с этой информацией, имейте отношение "один ко многим" к таблице описаний, например

create table Product(id int, [name] varchar(255),[price] decimal(15,2))
create table Description (id int, description varchar(255))
create table ProductDescription (ProductId int, DescriptionId int)

insert into #Product (id, [name], price) values
(1, 'Product1',100.10), (2, 'Product2', 200.20), (3, 'Product3', 300.30)
insert into #Description (id, [description]) values
(1, 'Baby Product'),(2,'Adult Product')
insert into #ProductDescription(ProductId, DescriptionId) values
(1,1),(1,2),(2,2),(3,1)
Вы можете связать их вот так:
select P.id, P.[name], P.price, D.[Description]
	FROM #Product P
	INNER JOIN #ProductDescription PD ON PD.ProductID=P.id
	INNER JOIN #Description D on D.id=PD.DescriptionId
	WHERE D.[Description] = 'Baby Product'
Результаты:
1	Product1	100.10	Baby Product
3	Product3	300.30	Baby Product
Вы можете восстановить "полное описание" продукта, используя для XML-пути, например (возможно, не самый лучший запрос tbh)
;WITH CTE AS
(
	select P.id, P.[name], P.price, D.[Description]
	FROM #Product P
	INNER JOIN #ProductDescription PD ON PD.ProductID=P.id
	INNER JOIN #Description D on D.id=PD.DescriptionId
),
CTE1 AS
(
	SELECT id, [Description] = 
    STUFF((SELECT ', ' + CAST([Description] as nvarchar)
           FROM [CTE] p1
           WHERE p1.id = p2.id 
          FOR XML PATH('')), 1, 2, '')
	FROM CTE p2
	GROUP BY id
)
SELECT * from CTE1 A WHERE id IN 
(SELECT ProductId FROM #ProductDescription PD INNER JOIN #Description D ON PD.DescriptionId = D.id WHERE D.[Description] = 'Baby Product')
Результаты:
1	Baby Product, Adult Product
3	Baby Product

Производительность по сравнению с вашей исходной схемой или моим предложением потенциально может быть улучшена за счет использования соответствующих индексов