Индексируйте столбец суммы

21
задан Nikhil Sahu 20 July 2017 в 08:35
поделиться

5 ответов

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

Вы выяснение, оно ускорило бы запрос такой как

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

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

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

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

SELECT sum(foo) FROM bar

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

42
ответ дан 29 November 2019 в 06:46
поделиться

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

9
ответ дан 29 November 2019 в 06:46
поделиться

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

0
ответ дан 29 November 2019 в 06:46
поделиться

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

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

, который ответ на Ваш вопрос заключается на ответе Spencer:

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

Просто разъяснил контекст столбцов в ответе Spencer. Его ответ корректен, тем не менее.

5
ответ дан 29 November 2019 в 06:46
поделиться

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

SELECT productid, sum (количество) FROM поступления WHERE productid = 1 GROUP BY productid

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

0
ответ дан 29 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: