Я думал, что это не так, потому что потребуется сканирование таблицы (независимо от того, есть ли индекс), чтобы «суммировать» все значения.
Нет, вы также можете просто отсканировать индекс.Он содержит (в вашем примере) запись для каждой строки и значение name
столбца.
И, в отличие от таблицы, индекс уже будет сгруппирован / отсортирован по name
, поэтому дополнительный этап сортировки не требуется.Если вы попытаетесь сделать это с полным сканированием таблицы, вам понадобится много памяти или временное пространство для запуска счетчиков для каждого имени.
Именно эта вторая часть и делает здесь большую разницу (не так много, что сканирование всего индекса происходит быстрее, чем сканирование всей таблицы, что также верно, конечно, потому что он меньше и, возможно, уже кэширован).
Вы можете легко проверить это, посмотрев наплан выполнения.
Обратите внимание, что для целей этого вопроса не будет применяться фильтр или сортировка.
Если вы ссылались на другие столбцы в запросеиндекс больше не является «индексом покрытия» и больше не может использоваться (сам по себе) для удовлетворения запроса.