CREATE TABLE `messages` (
`ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`Arrival` TIMESTAMP NOT NULL,
`SenderID` INT UNSIGNED NOT NULL,
-- Fields describing messages skipped
PRIMARY KEY (`SenderID`, `Arrival`, `ID`) USING BTREE,
INDEX `ID` (`ID`) USING BTREE,
INDEX `Arrival_SenderID` (`Arrival`, `SenderID`) USING BTREE
)
Таблица также разделяется по range (unix_timestamp (`grrival`)) к месяцу, выравнивается в календаре. Теперь задача состоит в том, чтобы сообщить о пробелах внутри некоторых, которые больше, чем определенное количество времени. В настоящее время запрос (@afrom и @ato установлен на декабрь 2024 года, @adays равно 5): < /p>
WITH t AS (
SELECT `Messages`.`SenderID`, `Messages`.`Arrival`,
LAG(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Prev`,
LEAD(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Next`
FROM `Messages`
INNER JOIN `Senders` ON `Senders`.`SenderID` = `Messages`.`SenderID` AND `Senders`.`Active` IS TRUE
WHERE `Arrival` BETWEEN @aFrom AND @aTo
)
SELECT `SenderID`, IFNULL(`Prev`, @aFrom) AS `From`, `Arrival` AS `To` FROM t
WHERE TIMESTAMPDIFF(SECOND, IFNULL(`Prev`, @aFrom), `Arrival`) > @aDays * 24 * 3600
UNION
SELECT `SenderID`, `Arrival` AS `From`, IFNULL(`Next`, @aTo) AS `To` FROM t
WHERE TIMESTAMPDIFF(SECOND, `Arrival`, IFNULL(`Next`, @aTo)) > @aDays * 24 * 3600
ORDER BY `SenderID`, `From`;
< /code>
Но такой запрос имеет этот объясняющий вывод: < /p>
id < /th>
select_ lelect_ /> Таблица < /th>
разделы < /th>
type < /th>
возможно ,_keys < /th>
key < /th>
key_len < /th>
ref < /th>
невыханный /> (null) < /td>
14430 < /td>
100,00 < /td>
, используя где; Использование временного; Использование Filesort < /td>
< /tr>
2 < /td>
неполный полученное < /td>
< /td>
p202412 < /td>
/> первичный, grrival_senderid < /td>
первичный < /td>
4 < /td>
tstestdb.senders.senderid
справа; "> 50,00 < /td>
Использование где; Использование индекса < /td>
< /tr>
3 < /td>
Union < /td>
< /td>
(null) < /td>
< /td> < /td> < /td> /> (null) < /td>
(null) < /td>
(null) < /td>
(null) < /td>
2700140 < /td>
100,00 < /td>
Использование, где < /td>
< /tr>
(null) < /td>
Союз-результат < /td>
< /td> /> (null) < /td>
all < /td>
(null) < /td>
(null) < /td>
(null) < /td>
(null) < /td>
right; "> (null) < /td>
(null) < /td>
с использованием временного; Использование Filesort
`Senders`.`SenderID`
уникальный индексирован. Общее количество активных отправителей к настоящему времени составляет около 12000 (несколько тысяч неактивных и обычно не отправляют сообщения), общее количество сообщений в месяц составляет примерно 100 миллионов. Версия MySQL для этого конкретного тестового сервера составляет 8.0.20, другие целевые серверы могут иметь другие версии 8.0.x. Есть ли способы улучшить запрос?
[code]CREATE TABLE `messages` ( `ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `Arrival` TIMESTAMP NOT NULL, `SenderID` INT UNSIGNED NOT NULL, -- Fields describing messages skipped PRIMARY KEY (`SenderID`, `Arrival`, `ID`) USING BTREE, INDEX `ID` (`ID`) USING BTREE, INDEX `Arrival_SenderID` (`Arrival`, `SenderID`) USING BTREE ) [/code] Таблица также разделяется по range (unix_timestamp (`grrival`)) к месяцу, выравнивается в календаре. Теперь задача состоит в том, чтобы сообщить о пробелах внутри некоторых, которые больше, чем определенное количество времени. В настоящее время запрос (@afrom и @ato установлен на декабрь 2024 года, @adays равно 5): < /p> [code] WITH t AS ( SELECT `Messages`.`SenderID`, `Messages`.`Arrival`, LAG(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Prev`, LEAD(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Next` FROM `Messages` INNER JOIN `Senders` ON `Senders`.`SenderID` = `Messages`.`SenderID` AND `Senders`.`Active` IS TRUE WHERE `Arrival` BETWEEN @aFrom AND @aTo ) SELECT `SenderID`, IFNULL(`Prev`, @aFrom) AS `From`, `Arrival` AS `To` FROM t WHERE TIMESTAMPDIFF(SECOND, IFNULL(`Prev`, @aFrom), `Arrival`) > @aDays * 24 * 3600 UNION SELECT `SenderID`, `Arrival` AS `From`, IFNULL(`Next`, @aTo) AS `To` FROM t WHERE TIMESTAMPDIFF(SECOND, `Arrival`, IFNULL(`Next`, @aTo)) > @aDays * 24 * 3600 ORDER BY `SenderID`, `From`; < /code> Но такой запрос имеет этот объясняющий вывод: < /p>
id < /th>
select_ lelect_ /> Таблица < /th> разделы < /th> type < /th> возможно ,_keys < /th> key < /th> key_len < /th> ref < /th> невыханный /> (null) < /td> 14430 < /td> 100,00 < /td> , используя где; Использование временного; Использование Filesort < /td> < /tr>
(null) < /td> Союз-результат < /td> < /td> /> (null) < /td> all < /td> (null) < /td> (null) < /td> (null) < /td> (null) < /td> right; "> (null) < /td> (null) < /td> с использованием временного; Использование Filesort
`Senders`.`SenderID`[/code] уникальный индексирован. Общее количество активных отправителей к настоящему времени составляет около 12000 (несколько тысяч неактивных и обычно не отправляют сообщения), общее количество сообщений в месяц составляет примерно 100 миллионов. Версия MySQL для этого конкретного тестового сервера составляет 8.0.20, другие целевые серверы могут иметь другие версии 8.0.x. Есть ли способы улучшить запрос?
У меня есть большой набор данных (5M+ записи) преступлений в Нью -Йорке. Я хочу выбрать 5 преступлений из столбца «ofns_desc» и группировать преступления в соответствии с количеством случаев в течение месяца, чтобы я мог построить временной ряд...
У меня есть большой набор данных (5M+ записи) преступлений в Нью -Йорке. Я хочу выбрать 5 преступлений из столбца «ofns_desc» и группировать преступления в соответствии с количеством случаев в течение месяца, чтобы я мог построить временной ряд...
Я создал живые действия с использованием пакета Live_Activities . Я настраиваю ароматы для приложения SaaS, где каждый вкус представляет собой другую организацию. Я не хочу настраивать отдельные группы приложений для каждого аромата, поэтому я...
Я создал живые действия с использованием пакета Live_Activities . Я настраиваю ароматы для приложения SaaS, где каждый вкус представляет собой другую организацию. Я не хочу настраивать отдельные группы приложений для каждого аромата, поэтому я...
Я разрабатываю живую деятельность, которая покажет только оставшееся время парковки, которое является фиксированным. Он должен отображать таймер как на заблокированном, так и на разблокированном экране. Это только наложение
происходит, когда вы...