最佳性能的SQL解决方案,用于登陆页面返回的结果

时间:2018-04-26 16:50:33

标签: sql sql-server performance join offset

我正在寻找从1个表中返回结果的最快方法,基于另一个表中列出的条件。

我们的网站上有许多目标网页。每个都在SQL 2016数据库的登陆表中有记录,因此:

ID int(主键+标识)

名称 varchar(30)

Criteria_Type varchar(30)

Criteria_Colour varchar(10)

每个着陆页记录都描述了要显示的产品的标准。此外,网站上的用户可以覆盖某些标准,例如颜色。此外,Landing中的条件可能为null,因为我们可能需要所有Widget产品类型而不管颜色。

目前,我可以通过存储过程返回结果的最快方式是:

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

网页会传递ID号,页码和任何颜色覆盖信息,并且程序会返回产品。

有没有更好的方法,也许是加入?有许多不同的标准可以应用 - 我已经减少了这个例子。

0 个答案:

没有答案