我有大约200万行的数据库,我需要解决我当前的页面,并已决定去与以下几点:为此特定查询设置索引的最佳方式?
SET @startRowIndex = ((@Page-1) * @PageSize) + 1;
SET ROWCOUNT @startRowIndex
SELECT @first_id = ProductID FROM LiveProducts (nolock) WHERE [email protected] AND ModifiedOn >= @tStamp ORDER BY ProductID
SET ROWCOUNT @PageSize
SELECT * FROM LiveProducts (nolock) WHERE [email protected] AND ProductID >= @first_id ORDER BY ProductID
我没有在附近一个DBA,我想这是因为快尽可能。我在这件事上设定了哪些指数。从我的阅读和我收集的基本知识中,我应该在ManufacturerID,ProductID和ModifiedOn上创建一个非聚集索引。
但是,他们应该都是Index key column
s,或者只有一个在Included Columns
?
你的分页逻辑没有意义。如果查询返回> 1行,那么第一个查询将不会以书面形式工作,因此您无法执行标量分配。你可能想说“@first_id”= MAX(ProductID)。您的第二个查询具有与第一个查询不同的WHERE子句。您至少需要在第二个查询中包含ModifiedOn> =“@tStamp”以获得一致的分页。 –