|
|
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Возможно-ли построить какой-либо индекс что-бы запрос работал быстрее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Текущий план выполнения: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 14:47 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
нет. Ну только если img_total вам не нужен ну и статусы высокоселективны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 15:01 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
В принципе можно пожертвовать total, я его позже посчитаю как сумму статусов. Какие в подобной ситуации возможны варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 15:17 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
chernomyrdinВ принципе можно пожертвовать total, я его позже посчитаю как сумму статусов. Какие в подобной ситуации возможны варианты? индекс на статус, если статусы высокоселективны и полно других статусов > 3 и тогда where status between 0 and 3 сгенерит поиск по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 15:20 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
chernomyrdinВ принципе можно пожертвовать total, я его позже посчитаю как сумму статусов. Какие в подобной ситуации возможны варианты? ничего существенного вы не выиграете, но если по мелочи на операциях -- сначала Код: sql 1. , и только потом -- пивотинг case-ами над готовыми агрегатами. Код: sql 1. 2. (если есть покрывающий оба поля индекс, и визибилити мап как правило актуальна -- можно ещё немного отжать, копейки -- на IOS) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 15:28 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Ivan DurakchernomyrdinВ принципе можно пожертвовать total, я его позже посчитаю как сумму статусов. Какие в подобной ситуации возможны варианты? индекс на статус, если статусы высокоселективны и полно других статусов > 3 и тогда where status between 0 and 3 сгенерит поиск по индексу.у него тотал -- это сумма по остальным, т.ч. только на операциях при агрегировании можно чутка сэкономить. И в 9.3 -- на IOS--агрегате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 15:30 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Возможно я не прав, возможно я в вел почтенную публику в заблуждение. Смысл всей этой затеи в том, что есть организации у каждой их них есть некторое количество итемов пребывающих в неких состояниях, соответственно хотелось-бы получить одним запросом количество итемов в тех или иных состояниях для всех организаций. Как таковой total не интересет так как он легко получается из суммы всех статусов организации. Как мне показалось запрос приведенный в начале ветки, самый простой, который решает задачу "в лоб", Возможно так будет оптимальнее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но все равно план выполнения: Код: plaintext 1. 2. 3. Да, индекс покрывающий org_id + status имеется: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 19:25 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Еще один вариант решения, оно использует индекс, но все равно работает медленнее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. План выполнения: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 19:46 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
chernomyrdin, а можно explain analyze этого запроса с set enable_seqscan = off; ? Код: sql 1. 2. 3. если будет медленней (наверняка будет), чем с seq scan, то сильно улучшить скорей всего не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 06:56 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Alexiuschernomyrdin, а можно explain analyze этого запроса с set enable_seqscan = off; ? Код: sql 1. 2. 3. если будет медленней (наверняка будет), чем с seq scan, то сильно улучшить скорей всего не получится.сильно улучшить не получится вообще . только если записи таблицы много шире записи индекса, и, при этом, карта видимости -- актуальна почти вся. И то это бцло бы константное улучшение, а не логарифмическое или степенное. Если же сама таблица узкая -- то выигрыша практически не будет (там мелочь на операциях, и на том, что группировать по инлдексу дешевле на dort/hash или т.п. и интересно, какая версия пж у тс. 9.3. по однопольному индексу умеет IOS count-ы группировать. по составному не проверял. а в 9.2 не задалось (на той же структуре). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 08:08 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
этта дешевле на dort/hash или т.п. Sort/hash очепятався, пртстт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 08:10 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Да, принципиально быстрее никак не будет. Тут принципиально - или уже переходить на что-то инмемори. Или держать предрасчитанную таблицу с количествами. Или не считать сразу по всем-всем организациям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 09:22 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
Alexius, Вот что получается: Код: plsql 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. Для сравнения: Код: plsql 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 09:33 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
все-таки ios иногда спасает. ~140мс в принципе хорошее время (агрегация сверху еще пару ms добавит). если база всегда в памяти или диски ssd, можно осторожно подкрутить random_page_cost, чтобы правильный план выбирался. или прописать хак с enable_seqscan в коде/хранимке. можно еще проверить на всякий случай что автовакуум нормально работает и dead rows оперативно подчищаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 15:16 |
|
||
|
Оптимизация GROUP BY
|
|||
|---|---|---|---|
|
#18+
chernomyrdinAlexius, Вот что получается: Код: plsql 1. 2. 3. 4. 5. попробуй заменить count(*) на count(org_id) может сам догадается ios сделавть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 21:40 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38896066&tid=1998134]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 334ms |

| 0 / 0 |
