Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Анализ: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Если убрать ORDER, то время сразу устраивает в отличии от результата: Код: sql 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. Нужна одна любая строчка с минимальной SUM_DIST. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 10:52 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_me, Вы статистику давно пересобирали? Во всех узлах ожидание 1 записи. SeqScan-ы по `ru_psk_point` с фильтрацией — может индексы сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 12:41 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
vyegorovits_me, SeqScan-ы по `ru_psk_point` с фильтрацией — может индексы сделать? там копейки. потом он берёт декартов квадрат 181*181 = 32761 (нельзя ли усечь до треугольника), умножает его декартово ещё на табличку -- и начинает фильтровать по функциональным критериям. потом сортирует опять по ф-ии, и берет первое. ессно, всё это дорого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 14:04 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwq, не совсем копейки, есть смысл индексы сделать, чтобы на секунду ускорить: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 15:04 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
Alexiusqwwq, не совсем копейки, есть смысл индексы сделать, чтобы на секунду ускорить: неа, взять 1 цте, с обеими расстояниями, и квадратить уже его декартом. (а лучше -- таки треуголить, если по логике возможно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 15:09 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
А можно поприземлённей немного выдать рекомендацию?)) Я уж точно ничего не декартил - просто написал запрос.)) По поводу индексов ru_psk_point, есть только 2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 15:14 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_me, декартите,, да ещё и со свистом Код: sql 1. 2. 3. 4. -- это одна и та же выборка, но с разными расчетными расстояниями. возьмите её как одно цте. и 2 раза попользуйте. если не боитесь писать рукамидалее -- вы знаете, что расстояния неотрицательны (ну вот так вот оно) и вы знаете, что сумма неотрицательных упорядочена где--то по слагаемым, с максимумами по диагонали слагаемых. т.е. можете взять руками цте, и по нему рекурсивно например побежать от минимальных расстояний, проверяя фильтры по--ходу. а не сортируя итоговое произведение. если рекурсивный запрос для вас сложен -- распишите в plpgsql двумя вложенными циклами. (там надо выскакивать не сразу, а когда одна из координат превзойдет минимальную ранее найденную сумму -- т.е. ограниченный сорт у вас останется) но это суровый хенджоб тащемто, проще попытаться запинать вдвое, зная как у вас ориентировано это нечто (с какого конца по ид у вас старт, а с какого енд) -- вместо квадрата получите его половину . в 10 раз не выиграете -- но 2--ку наберете. ну и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 17:06 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwq, для начала что такое "цте"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 17:08 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
и еще, изначально был вариант через циклы в функции(меньше предыдущего) - дольше, в итоге я у этого запроса сижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 17:11 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_meqwwq, для начала что такое "цте"? ЦТЕ == CTE == Common Table Expression Имеют эффект материализации (гарантированно исполняются только один раз). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 22:26 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwqits_me, т.е. можете взять руками цте, и по нему рекурсивно например побежать от минимальных расстояний, проверяя фильтры по--ходу. а не сортируя итоговое произведение. Этот момент можете прояснить, у меня в голове несколько вариантов возникло, но что именно Вы имели ввиду(взять весь мой результат и прорекурсиветь или взять отдельную часть запроса прорекурсиветь и далее ее "соединить" и тп)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:42 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_me, у вас 181 запись с 2-- мя расстояниями, вы их декартово умножается на себя, расстояния складываются. получается 181*181 вариантов, которые вы фильтруете умножая эти 181*181 ещё на таблицу -- для фильтра. (вместо скажем екзистса) потом результат сортируете по сумме расстояний, и берете 1 запись вдоль сортировки. ясно, что вы можете бежать в двойном цикле по 2-м сортированным (по разному) экземплярам (по 191 записи), и найти первое попавшееся под итоговый фильтр. вернее пробежаться чуть дальше -- до размера любой координаты в квадранте "не больше" первого найденного суммарного расстояния [далее => текущего минимального суммарного расстояния], и там немного посортировать (на самом -- на лету вычислять least), но гораздо меньше чем 181*181. как--то так. короче -- ищущий да обрящет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:00 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwq, Я только вчера узнал про рекурсивную выборку, а тут такое объяснение, зря спросил)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:06 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_me, Можете где-то дампы табличек выложить, поиграться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 19:43 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
vyegorov, Честно говоря даже не знаю как подойти к этому вопросу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 11:39 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
vyegorov, есть такая ссылка: https://www.dropbox.com/s/pbtn1qhgioruqh3/backup_tables.7z?dl=0 пойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 14:56 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwqits_me, у вас 181 запись с 2-- мя расстояниями, вы их декартово умножается на себя, расстояния складываются. получается 181*181 вариантов, которые вы фильтруете умножая эти 181*181 ещё на таблицу -- для фильтра. (вместо скажем екзистса) потом результат сортируете по сумме расстояний, и берете 1 запись вдоль сортировки. ясно, что вы можете бежать в двойном цикле по 2-м сортированным (по разному) экземплярам (по 191 записи), и найти первое попавшееся под итоговый фильтр. вернее пробежаться чуть дальше -- до размера любой координаты в квадранте "не больше" первого найденного суммарного расстояния [далее => текущего минимального суммарного расстояния], и там немного посортировать (на самом -- на лету вычислять least), но гораздо меньше чем 181*181. как--то так. короче -- ищущий да обрящет. Вы тут имеете ввиду через функцию(циклы) или ЦТЕ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 10:48 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwq ясно, что вы можете бежать в двойном цикле по 2-м сортированным (по разному) экземплярам (по 191 записи), и найти первое попавшееся под итоговый фильтр. вернее пробежаться чуть дальше -- до размера любой координаты в квадранте "не больше" первого найденного суммарного расстояния [далее => текущего минимального суммарного расстояния], и там немного посортировать (на самом -- на лету вычислять least), но гораздо меньше чем 181*181. Кто-нибудь может перевести это на человеческий язык? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 11:58 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
its_meqwwqясно, что вы можете бежать в двойном цикле по 2-м сортированным (по разному) экземплярам (по 191 записи), и найти первое попавшееся под итоговый фильтр. вернее пробежаться чуть дальше -- до размера любой координаты в квадранте "не больше" первого найденного суммарного расстояния [далее => текущего минимального суммарного расстояния], и там немного посортировать (на самом -- на лету вычислять least), но гораздо меньше чем 181*181. Кто-нибудь может перевести это на человеческий язык? вы хотели спросить, как это перевести с человеческого на язык пошаговых инструкций "для дебилов" ? можно и на пошаговый. но лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 12:34 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
маленький экзерсис для мозга: вот например у вас есть неуникальный индекс , для простоты по NOT NULL полю , и вы выбираете вдоль него лимит 10 смотрите план -- постгрес правильно берет лимит вдоль индекса, профетчив всего 10 записей. далее вы добавляете в свой order by, ПОСЛЕ своего индексированного поля, еще и ключевое поле -- для уникальности [повторяемости] сортировки -- смотрите план, и видите лимит после фетча всего и сортировки всего. и начинаете медленно охеревать с интеллектуальности оптимизатора. недолго думая вы пишете выборку всего того, что не больше (по вашему полю), чем то, что найдено по предыдущему, неповторимому, условию "лимит 10", и делаете повторимый ордер бай лимит 10 от этой промежуточной выборки -- и берёте с полки пирожок с чувством СВ "глубокого удовлетворения". вот когда этот экзерсис разберёте руками и поймете -- начнете что--то понимать и про прочую оптимизацию. А заодно -- про оптимизатор ПЖ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 12:50 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwq далее вы добавляете в свой order by, ПОСЛЕ своего индексированного поля, еще и ключевое поле -- для уникальности [повторяемости] сортировки -- смотрите план, и видите лимит после фетча всего и сортировки всего. и начинаете медленно охеревать с интеллектуальности оптимизатора. добавить в order by в смысле или имеется ввиду подзапрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 14:54 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwqмаленький экзерсис для мозга: вот например у вас есть неуникальный индекс , для простоты по NOT NULL полю , и вы выбираете вдоль него лимит 10 смотрите план -- постгрес правильно берет лимит вдоль индекса, профетчив всего 10 записей. далее вы добавляете в свой order by, ПОСЛЕ своего индексированного поля, еще и ключевое поле -- для уникальности [повторяемости] сортировки -- смотрите план, и видите лимит после фетча всего и сортировки всего. и начинаете медленно охеревать с интеллектуальности оптимизатора. недолго думая вы пишете выборку всего того, что не больше (по вашему полю), чем то, что найдено по предыдущему, неповторимому, условию "лимит 10", и делаете повторимый ордер бай лимит 10 от этой промежуточной выборки -- и берёте с полки пирожок с чувством СВ "глубокого удовлетворения". вот когда этот экзерсис разберёте руками и поймете -- начнете что--то понимать и про прочую оптимизацию. А заодно -- про оптимизатор ПЖ. Да дело не в объяснении, русских слов мало да ещё и присутствуют биржевые определения. Вообще я до Вашего объяснения сделал так: взял из первой строки(limit 1) первую сумму(быстро отрабатывает) и сделал в выборке не больше или равно этой суммы, а как гарантия того что не попадет самое большое сделал ORDER по dist_start например и время сократилось в 10-15 раз. Может Вы примерно такое имели ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 14:59 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
qwwqвот например у вас есть неуникальный индекс , для простоты по NOT NULL полю , и вы выбираете вдоль него лимит 10 смотрите план -- постгрес правильно берет лимит вдоль индекса, профетчив всего 10 записей.. вот что получилось Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. т.е. таки по таблице скан, если я правильно понимаю план ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:04 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
Jonhson, data Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. test: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. handjob Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. особенно это приятно, когда какой--нито битмап скан вместо индекскана превращает лимит проходной по мердж джойну партиций в лимит после фулл апенда + сорта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:30 |
|
||
|
Что можно сделать для сокращения времени обработки запроса?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. когда сделал сорт (в моём тесте) , пошло по индексу. Правда что раньше мешало? ;) а в вашем тесте не понял Код: sql 1. если вы берёте select id, f , при этом id нет в индексе по f ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:46 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39265419&tid=1997126]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 300ms |

| 0 / 0 |
