|
|
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Задача: Необходимо вывести кол-во ОДНОВРЕМЕННЫХ запросов, то есть кол-во ПЕРЕСЕЧЕНИЙ интервалов. Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. На 60000 записях запрос работает 50 секунд :(. А их будут сотни тысяч... Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:13:22 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, Количество одновременных в какой момент времени? Давай возмем два граничных случая: 1) абсолютно все интервалы пересекаются; 2) пересекающихся интервалов нет вообще. Что нужно вывести в каждом из случаев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:44:06 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Все пересекающиеся интервалы из таблицы (вне зависимости от периода времени пока что). Важен не период времени, а факт наложения одних интервалов на другие (кол-во таких пересечений) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:49:30 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхweblloyd, 1) абсолютно все интервалы пересекаются; 2) пересекающихся интервалов нет вообще. Что нужно вывести в каждом из случаев? 1) total = кол-ву записей в талице (все одновременны) 2) total = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:50:46 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Ну а вообще, у меня стоит задача аналитики: сколько одновременных подключений было за сутки (по часам от 0 до 23) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:56:08 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Также мне необходимо знать пик одновременных соединений (пересечений) за все время (пик нагрузки) без периода. То есть одно число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 16:09:37 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, Есть ли какой-нибудь порог, дольше которого регистрируемые события быть не могут никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 16:25:36 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, то есть, по сути, тебе нужно рассчитать эрланг? как бы из общих соображений можно сделать такой вывод: каждое начало запроса/сессии увеличивает суммарное их количество на единицу. каждое окончание запроса/сессии уменьшает их количество на единицу. стало быть, если данные представить в виде: "дата события", "флаг события", где дата - это одно из полей date_end/date_start, а флаг - это +1 для начала, -1 - для кончала. далее всё что останется - расчитать накопительный итоге в сортировке по "дате события" и взять от него максимум... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 16:53:19 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, ну или немного в псевдокоде (касательно первой части - представление данных в другом виде): Код: sql 1. 2. 3. вот теперь к этому набору нужно применить накопительный итог по полю flag в сортировке по полю x_date. как считать накопительный итог - читать тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 16:57:44 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхДобрый Э - Эх, вот теперь к этому набору нужно применить накопительный итог по полю flag в сортировке по полю x_date. как считать накопительный итог - читать тут Если вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. То такой запрос выполняется 22 секунды на 4000 записей на MacBook Pro. А записей будут сотни тысяч... То есть такой запрос всегда будет медленным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 17:24:50 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, Не нужно делать неэквивалентное само объединение. Нужно попробовать использование переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 17:35:56 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, В таком варианте твой запрос 4 раза заходит в исходную таблицу. Отсюда и медленно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 17:37:38 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, приведи несколько строк тестовых данных в формате инсертов. чтобы я мог создать табличку, наполнить её данными и потренироваться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 17:39:57 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхweblloyd, приведи несколько строк тестовых данных в формате инсертов. чтобы я мог создать табличку, наполнить её данными и потренироваться... я не знаю как использовать переменные... приложил файл инсертов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 13:53:35 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd Необходимо вывести кол-во ОДНОВРЕМЕННЫХ запросов, то есть кол-во ПЕРЕСЕЧЕНИЙ интервалов. На 60000 записях запрос работает 50 секунд :(. А их будут сотни тысяч... Как быть? Для начала нужно понять, что задача В ПРИНЦИПЕ обладает стоимостью O(N**2). Если даже это удастся оптимизировать индексом, то задача получит стоимость O(N*log N), т.е. МИНИМУМ -- линейный рост. Соответственно, как только ты выходишь на достаточно большие объёмы данных, это всё автоматом перестаёт работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 16:02:51 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZivweblloydНеобходимо вывести кол-во ОДНОВРЕМЕННЫХ запросов, то есть кол-во ПЕРЕСЕЧЕНИЙ интервалов. На 60000 записях запрос работает 50 секунд :(. А их будут сотни тысяч... Как быть? Для начала нужно понять, что задача В ПРИНЦИПЕ обладает стоимостью O(N**2). Если даже это удастся оптимизировать индексом, то задача получит стоимость O(N*log N), т.е. МИНИМУМ -- линейный рост. Соответственно, как только ты выходишь на достаточно большие объёмы данных, это всё автоматом перестаёт работать. ...ну что вы пугаете человека неверными расчетами... задача то по среднему О(N*logN), а так как данные скорее всего пресортированые из лога по времени, то и просто О(N)... ...а индекс нужен ну просто нафиг... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 03:47:00 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
weblloyd, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. on-line проверка на sqlfiddle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 07:06:18 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
javajdbcMasterZivпропущено... Для начала нужно понять, что задача В ПРИНЦИПЕ обладает стоимостью O(N**2). Если даже это удастся оптимизировать индексом, то задача получит стоимость O(N*log N), т.е. МИНИМУМ -- линейный рост. Соответственно, как только ты выходишь на достаточно большие объёмы данных, это всё автоматом перестаёт работать. ...ну что вы пугаете человека неверными расчетами... задача то по среднему О(N*logN), а так как данные скорее всего пресортированые из лога по времени, то и просто О(N)... ...а индекс нужен ну просто нафиг... ты неправ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 12:35:41 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZivjavajdbcпропущено... ...ну что вы пугаете человека неверными расчетами... задача то по среднему О(N*logN), а так как данные скорее всего пресортированые из лога по времени, то и просто О(N)... ...а индекс нужен ну просто нафиг... ты неправ... ...посмотри решение в предыдушем посте от Добрый Э - Эх. Самымая мошная операция -- сорт, и то данные с большой вероятностью уже пред-сортированые по времени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 14:38:48 |
|
||
|
Очень долгий запрос к MySQL
|
|||
|---|---|---|---|
|
#18+
javajdbcСамымая мошная операция -- сорт, и то данные с большой вероятностью уже пред-сортированые по времени... Одна мелочь: для quick sort (АКА метод Хаара) это наихудший вариант по производительности. Оно при этом сваливается чуть ли не в O(N^2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 14:46:34 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39128840&tid=1832358]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
376ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 711ms |

| 0 / 0 |
