Какой индекс я должен создать при использовании нескольких OrderBy - PullRequest
0 голосов
/ 10 января 2019

Я использую Entity Framework Core и читаю некоторые данные с тысячами записей. У каждой записи есть много столбцов, из которых я использую 3 (a, b и c) и делаю:

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

А потом я применяю сортировку и нумерацию страниц.

Чтобы повысить скорость запроса, какой тип индекса (если есть) мне следует создать? Модификация таблиц не так часто, как чтение. Должен ли я создать один индекс с 3 столбцами? в каком порядке? или по одному на каждый столбец?

1 Ответ

0 голосов
/ 10 января 2019

ЕСЛИ в вашем запросе используется предложение 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.

...