使用多个 OrderBy 时应该创建哪个索引
Which Index Should I Create when using multiple OrderBy
我正在使用 Entity Framework Core 并读取一些包含数千条记录的数据。每条记录都有很多列,我正在使用 3 列(a、b 和 c)并执行:
OrderBy(a).ThenBy(b).ThenBy(c);
然后我应用排序和分页。
为了提高该查询的速度,我应该创建哪种索引(如果有)?表格的修改不像阅读那么频繁。我应该用 3 列创建一个索引吗?按什么顺序?还是每列一个?
如果您的查询也使用 WHERE 子句,如下所示...
SELECT ColumnA,
FROM Table
WHERE ColumnA = 0
ORDER BY Column1, Column2, Column3
然后按以下顺序创建索引 ColumnA、Column1、Column2、Column3。
如果您使用 OFFSET FETCH NEXT ROWS ONLY 进行分页,该索引仍然有效
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。
我正在使用 Entity Framework Core 并读取一些包含数千条记录的数据。每条记录都有很多列,我正在使用 3 列(a、b 和 c)并执行:
OrderBy(a).ThenBy(b).ThenBy(c);
然后我应用排序和分页。
为了提高该查询的速度,我应该创建哪种索引(如果有)?表格的修改不像阅读那么频繁。我应该用 3 列创建一个索引吗?按什么顺序?还是每列一个?
如果您的查询也使用 WHERE 子句,如下所示...
SELECT ColumnA,
FROM Table
WHERE ColumnA = 0
ORDER BY Column1, Column2, Column3
然后按以下顺序创建索引 ColumnA、Column1、Column2、Column3。
如果您使用 OFFSET FETCH NEXT ROWS ONLY 进行分页,该索引仍然有效
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。