使用多个OrderBy时应创建哪个索引

时间:2019-01-10 04:49:07

标签: azure-sql-database database-indexes database-optimization ef-core-2.2

我正在使用Entity Framework Core并读取具有数千条记录的一些数据。每条记录都有很多列,其中我正在使用3(a,b和c)并执行以下操作:

OrderBy(a).ThenBy(b).ThenBy(c);

然后我要应用排序和分页。

为了提高查询速度,我应该创建哪种索引(如果有)?表格的修改不如阅读的那么频繁。我应该用3列创建一个索引吗?按什么顺序?还是每列一个?

1 个答案:

答案 0 :(得分:1)

如果您的查询也使用WHERE子句,如下所示...

SELECT ColumnA, 
FROM Table
WHERE ColumnA = 0
ORDER BY Column1, Column2, Column3

然后按照以下顺序创建索引:ColumnA,Column1,Column2,Column3。

如果您仅使用OFFSET FETCH NEXT ROWS进行分页,则该索引仍然有效

SELECT ColumnA, 
FROM Table
WHERE ColumnA = 0
ORDER BY Column1, Column2, Column3
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY

如果您的查询仅具有ORDER BY子句,而没有WHERE子句,则按以下顺序创建索引Column1,Column2,Column3。