Подтвердить что ты не робот

Индекс столбца суммы

Создает ли индекс для столбца, который суммируется быстрее, чем индекс?

4b9b3361

Ответ 1

Извините, неясно, о чем вы спрашиваете.

Вы спрашиваете, ускорит ли он запрос, например

SELECT product, sum(quantity) FROM receipts 
GROUP BY product

если вы добавили индекс на количество?

Если это вопрос, тогда ответ будет отрицательным. Вообще говоря, индексы полезны, когда вам нужно найти всего несколько строк среди многих; здесь вам нужны все строки, поэтому индекс не помогает.

Существует неясное исключение (которое применяется так редко, большинство оптимизаторов БД, вероятно, не мешают реализовать этот трюк). Если ваш запрос будет

SELECT sum(foo) FROM bar

где есть индекс на foo, а bar - таблица со многими столбцами, ее можно прочитать в полном индексе с меньшим ударом, чем если бы вы прочитали базовую таблицу и получить ответ непосредственно из index - никогда не прикасаться к "реальной" таблице вообще! Однако это довольно редкий случай, и вы захотите проверить, что ваш оптимизатор знает, как это сделать, прежде чем полагаться на это слишком много.

Ответ 2

Нет. Индексы улучшают поиск, ограничивая количество проверок. Агрегатная функция (count, max, min, sum, avg) должна выполняться через все записи в столбце независимо.

Ответ 3

Если вы хотите сделать суммирование быстрее, вы можете предварительно воспроизвести результат. В Oracle используйте Materialized Views, на MS SQL используйте Индексированные представления.

В вашем конкретном вопросе "Создает ли индекс для столбца, который суммируется быстрее, чем нет индекса?", ответ "Нет".

Ответ на ваш вопрос лежит на ответе Спенсера:

"Агрегатная функция (count, max, min, sum, avg) должна проходить через все записи в столбцах, которые суммируются независимо."

Просто уточнил контекст столбцов в ответе Спенсера. Тем не менее, его ответ правильный.

Ответ 4

Если индекс покрывает, он, как правило, будет быстрее. Насколько быстрее будет определяться разница между количеством столбцов в таблице и числом в индексе. Кроме того, это может быть быстрее, если есть какие-либо критерии фильтрации.

Ответ 5

Я нашел индексирование столбца в том, где (productid здесь) помогает при использовании этого запроса:

SELECT productid, сумма (количество) ОТ квитанций WHERE productid = 1 GROUP BY productid

Один из моих запросов длился от 45 секунд до почти моментально, как только я добавил индекс.