我正在寻找从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号,页码和任何颜色覆盖信息,并且程序会返回产品。
有没有更好的方法,也许是加入?有许多不同的标准可以应用 - 我已经减少了这个例子。