Я ищу самый быстрый способ возврата результатов из 1 таблицы на основе критериев, перечисленных в другой таблице.
У нас есть несколько целевых страниц на нашем сайте. У каждого есть запись в нашей таблице Landing в базе данных SQL 2016, таким образом:
ID int (первичный ключ + идентификатор)
Имя varchar (30)
Criteria_Type varchar (30)
Criteria_Colour varchar (10)
Каждая запись целевой страницы описывает критерии продуктов, которые будут отображаться. Кроме того, пользователь на веб-сайте может изменить некоторые критерии, такие как цвет. Кроме того, критерии в Приземлении могут быть нулевыми, потому что мы могли бы хотеть все типы продукта Виджета независимо от цвета.
В настоящее время самый быстрый способ вернуть результаты - использовать хранимую процедуру, таким образом:
CREATE PROCEDURE dbo.GET_LANDING_RESULTS
@LPID int,
@PageNumber int,
@Override_Colour varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Criteria_Type varchar(30)
DECLARE @Criteria_Colour varchar(10)
/* read criteria from landing table */
SELECT
@Criteria_Type=Criteria_Type,
@Criteria_Colour=Criteria_Colour
FROM dbo.Landing
WHERE ID = @ID
IF @Override_Colour is not null
@Criteria_Colour = @Override_Colour
/* get results */
SELECT
Count(ID) OVER() As TotalProducts,
ItemID,
Name,
ProductType,
Colour
Price
FROM dbo.Products
WHERE
(ProductType = @Criteria_Type OR @Criteria_Type is null) AND
(Colour = @Criteria_Colour OR @Criteria_Colour is null)
OFFSET @PageNumber ROWS
FETCH NEXT 10 ROWS ONLY
END
Веб-страница проходит идентификационный номер, номер страницы и любую информацию о переопределении цвета, и процедура возвращает продукты.
Есть ли лучший способ, возможно, с объединениями? Есть много разных критериев, которые можно применить - я сократил этот пример.