Какой индекс я должен создать при использовании нескольких OrderBy

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам