mirror of
https://github.com/friendica/friendica
synced 2025-03-14 07:48:27 +00:00
Merge pull request #14843 from MrPetovan/bug/14828-expireposts-performance
Replace NOT EXIST(SELECT) with LEFT JOIN WHERE IS NULL in ExpirePosts
This commit is contained in:
commit
f504c9d60a
1 changed files with 46 additions and 21 deletions
|
@ -199,31 +199,56 @@ class ExpirePosts
|
|||
return;
|
||||
}
|
||||
DI::logger()->notice('Start collecting orphaned URI-ID', ['last-id' => $item['uri-id']]);
|
||||
$condition = [
|
||||
"`id` < ?
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `post-user` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `parent-uri-id` FROM `post-user` WHERE `parent-uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `thr-parent-id` FROM `post-user` WHERE `thr-parent-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `external-id` FROM `post-user` WHERE `external-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `replies-id` FROM `post-user` WHERE `replies-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `context-id` FROM `post-thread` WHERE `context-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `conversation-id` FROM `post-thread` WHERE `conversation-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `mail` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `event` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `user-contact` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `contact` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `apcontact` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `diaspora-contact` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `inbox-status` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `post-delivery` WHERE `uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `uri-id` FROM `post-delivery` WHERE `inbox-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `parent-uri-id` FROM `mail` WHERE `parent-uri-id` = `item-uri`.`id`)
|
||||
AND NOT EXISTS(SELECT `thr-parent-id` FROM `mail` WHERE `thr-parent-id` = `item-uri`.`id`)", $item['uri-id']
|
||||
|
||||
$sql = [
|
||||
'SELECT i.id
|
||||
FROM `item-uri` i
|
||||
LEFT JOIN `post-user` pu1 ON i.id = pu1.`uri-id`
|
||||
LEFT JOIN `post-user` pu2 ON i.id = pu2.`parent-uri-id`
|
||||
LEFT JOIN `post-user` pu3 ON i.id = pu3.`thr-parent-id`
|
||||
LEFT JOIN `post-user` pu4 ON i.id = pu4.`external-id`
|
||||
LEFT JOIN `post-user` pu5 ON i.id = pu5.`replies-id`
|
||||
LEFT JOIN `post-thread` pt1 ON i.id = pt1.`context-id`
|
||||
LEFT JOIN `post-thread` pt2 ON i.id = pt2.`conversation-id`
|
||||
LEFT JOIN `mail` m1 ON i.id = m1.`uri-id`
|
||||
LEFT JOIN `event` e ON i.id = e.`uri-id`
|
||||
LEFT JOIN `user-contact` uc ON i.id = uc.`uri-id`
|
||||
LEFT JOIN `contact` c ON i.id = c.`uri-id`
|
||||
LEFT JOIN `apcontact` ac ON i.id = ac.`uri-id`
|
||||
LEFT JOIN `diaspora-contact` dc ON i.id = dc.`uri-id`
|
||||
LEFT JOIN `inbox-status` ins ON i.id = ins.`uri-id`
|
||||
LEFT JOIN `post-delivery` pd1 ON i.id = pd1.`uri-id`
|
||||
LEFT JOIN `post-delivery` pd2 ON i.id = pd2.`inbox-id`
|
||||
LEFT JOIN `mail` m2 ON i.id = m2.`parent-uri-id`
|
||||
LEFT JOIN `mail` m3 ON i.id = m3.`thr-parent-id`
|
||||
WHERE
|
||||
i.id < ? AND
|
||||
pu1.`uri-id` IS NULL AND
|
||||
pu2.`parent-uri-id` IS NULL AND
|
||||
pu3.`thr-parent-id` IS NULL AND
|
||||
pu4.`external-id` IS NULL AND
|
||||
pu5.`replies-id` IS NULL AND
|
||||
pt1.`context-id` IS NULL AND
|
||||
pt2.`conversation-id` IS NULL AND
|
||||
m1.`uri-id` IS NULL AND
|
||||
e.`uri-id` IS NULL AND
|
||||
uc.`uri-id` IS NULL AND
|
||||
c.`uri-id` IS NULL AND
|
||||
ac.`uri-id` IS NULL AND
|
||||
dc.`uri-id` IS NULL AND
|
||||
ins.`uri-id` IS NULL AND
|
||||
pd1.`uri-id` IS NULL AND
|
||||
pd2.`inbox-id` IS NULL AND
|
||||
m2.`parent-uri-id` IS NULL AND
|
||||
m3.`thr-parent-id` IS NULL
|
||||
LIMIT ?',
|
||||
$item['uri-id'],
|
||||
$limit
|
||||
];
|
||||
$pass = 0;
|
||||
do {
|
||||
++$pass;
|
||||
$uris = DBA::select('item-uri', ['id'], $condition, ['limit' => $limit]);
|
||||
$uris = DBA::p(...$sql);
|
||||
$total = DBA::numRows($uris);
|
||||
DI::logger()->notice('Start deleting orphaned URI-ID', ['pass' => $pass, 'last-id' => $item['uri-id']]);
|
||||
$affected_count = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue