Наиболее производительное SQL-решение для возврата результатов с целевой страницы - PullRequest
0 голосов
/ 26 апреля 2018

Я ищу самый быстрый способ возврата результатов из 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

Веб-страница проходит идентификационный номер, номер страницы и любую информацию о переопределении цвета, и процедура возвращает продукты.

Есть ли лучший способ, возможно, с объединениями? Есть много разных критериев, которые можно применить - я сократил этот пример.

...