powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кол-во пересечений интервалов дат, очень долгий запрос
13 сообщений из 13, страница 1 из 1
Кол-во пересечений интервалов дат, очень долгий запрос
    #39119788
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует таблица подключений с интервалами (начало подключение и конец)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE `statistic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_end` datetime(6) NOT NULL,
  `date_start` datetime(6) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `statistic_date_end_6f3de8e3933125c_uniq` (`date_end`),
  KEY `statistic_date_start_35e1f6a6a8caae3_uniq` (`date_start`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



Мне необходимо подсчитать кол-во единовременных подключений (пересечение интервалов)
Я делаю так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT COUNT(`out`.`id`)
FROM `statistic` AS `out`
WHERE EXISTS(
    SELECT *
    FROM `statistic_prolonged` AS `in`
    WHERE (
        `out`.`date_end` <= `in`.`date_start`
        AND `in`.`date_end` <= `out`.`date_start`
    )
);



Запрос по 4 тысячам записей длиться 20 секунд.
Поэтому 2 вопроса:

1) Правильно ли я вообще делаю?
2) Должен ли так долго выполняться этот запрос?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39119792
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
weblloydМне необходимо подсчитать кол-во единовременных подключений (пересечение интервалов)В смысле нужно пиковое максимальное значение?

Если конец одного интервала точно равен началу другого, то они считаются пересекающимися или нет?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39119827
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create view `change` as
select date_start `date`,  1 `value` from statistic
union all
select date_end         , -1         from statistic;

select c2.`date` `date`, sum(c1.`value`) conn_amount
from change c1, change c2
where c1.`date` <= c2.`date`
group by c2.`date`;
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120423
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, мне нужно одним запросом
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120428
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftweblloydМне необходимо подсчитать кол-во единовременных подключений (пересечение интервалов)В смысле нужно пиковое максимальное значение?

Если конец одного интервала точно равен началу другого, то они считаются пересекающимися или нет?

Совершенно верно. Пиковое значение единовременных. Если точно равен то тоже пересекает.
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120533
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
weblloydмне нужно одним запросом
Это и есть один запрос. И одно представление.
Не нравится вьюв? ну вставь во второй запрос вместо его имени его текст как подзапрос, делов-то...

PS. Кто вообще додумался до такой структуры?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120560
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaPS. Кто вообще додумался до такой структуры?

А что не так со структурой?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120592
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create view `change` as
select date_start `date`,  1 `value` from statistic
union all
select date_end         , -1         from statistic;

select c2.`date` `date`, sum(c1.`value`) conn_amount
from change c1, change c2
where c1.`date` <= c2.`date`
group by c2.`date`;



Ваш запрос выполняется 23 секунды по 4 тысячам записей...
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120660
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
weblloydчто не так со структурой?У вас есть ОДИН тип событий - изменение статуса соединения. Однако Вы почему-то в ОДНУ запись заносите информацию о ДВУХ событиях.
weblloydВаш запрос выполняется 23 секунды по 4 тысячам записей...
Правильно - вьюшка-то материализуется. Попробуйте объединить в один запрос.
Нужен быстрый запрос - используйте переменные.
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120912
weblloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaУ вас есть ОДИН тип событий - изменение статуса соединения. Однако Вы почему-то в ОДНУ запись заносите информацию о ДВУХ событиях.

А как, на ваш взгляд, правильно было бы хранить эти события (имеющие продолжительность)?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39120986
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну скажем
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE `connections` (
`id` SERIAL PRIMARY KEY,
`date` datetime NOT NULL,
`status` ENUM('connected', 'disconnected', 'error', 'unknown') NOT NULL,
);


Код: sql
1.
2.
3.
4.
5.
CREATE TABLE `sessions` (
`id` SERIAL PRIMARY KEY,
`start` BIGINT,
`end` BIGINT
);


и соответственно необходимые KEY, включая FOREIGN.
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39121015
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

почему start и end bigint...? что там будет?
...
Рейтинг: 0 / 0
Кол-во пересечений интервалов дат, очень долгий запрос
    #39121146
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovпочему start и end bigint...? что там будет?
FK на connections, есссно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Кол-во пересечений интервалов дат, очень долгий запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]