Merge pull request #12089 from annando/query-performance
(Hopefully) query performance improvements
This commit is contained in:
commit
d05ee962f9
|
@ -79,7 +79,7 @@ class Group
|
||||||
{
|
{
|
||||||
return Contact::selectToArray([], ["`uid` = ? AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `failed`
|
return Contact::selectToArray([], ["`uid` = ? AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `failed`
|
||||||
AND `id` NOT IN (SELECT DISTINCT(`contact-id`) FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid`
|
AND `id` NOT IN (SELECT DISTINCT(`contact-id`) FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid`
|
||||||
WHERE `group`.`uid` = ?)", $uid, $uid]);
|
WHERE `group`.`uid` = ? AND `contact-id` = `contact`.`id`)", $uid, $uid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -284,7 +284,7 @@ class Relation
|
||||||
$results = DBA::select('contact', [], ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
|
$results = DBA::select('contact', [], ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
|
||||||
(SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ?)
|
(SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ?)
|
||||||
AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
|
AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
|
||||||
(SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
|
(SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))) AND `id` = `cid`)
|
||||||
AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
|
AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
|
||||||
$cid,
|
$cid,
|
||||||
0,
|
0,
|
||||||
|
@ -314,7 +314,7 @@ class Relation
|
||||||
["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
|
["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
|
||||||
(SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ?)
|
(SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ?)
|
||||||
AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
|
AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
|
||||||
(SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
|
(SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))) AND `id` = `cid`)
|
||||||
AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
|
AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
|
||||||
$cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
|
$cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
|
||||||
Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
|
Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
|
||||||
|
@ -354,7 +354,7 @@ class Relation
|
||||||
|
|
||||||
// The query returns any contact that isn't followed by that user.
|
// The query returns any contact that isn't followed by that user.
|
||||||
$results = DBA::select('contact', [],
|
$results = DBA::select('contact', [],
|
||||||
["NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))
|
["NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?) AND `nurl` = `nurl`)
|
||||||
AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
|
AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
|
||||||
$uid, Contact::FRIEND, Contact::SHARING, 0,
|
$uid, Contact::FRIEND, Contact::SHARING, 0,
|
||||||
Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
|
Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
|
||||||
|
|
|
@ -400,10 +400,10 @@ class Post
|
||||||
AND ((NOT `contact-readonly` AND NOT `contact-pending` AND (`contact-rel` IN (?, ?)))
|
AND ((NOT `contact-readonly` AND NOT `contact-pending` AND (`contact-rel` IN (?, ?)))
|
||||||
OR `self` OR `gravity` != ? OR `contact-uid` = ?)
|
OR `self` OR `gravity` != ? OR `contact-uid` = ?)
|
||||||
AND NOT `" . $view . "`.`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `uid` = ? AND `hidden`)
|
AND NOT `" . $view . "`.`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `uid` = ? AND `hidden`)
|
||||||
AND NOT `author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `blocked`)
|
AND NOT `author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `blocked` AND `cid` = `author-id`)
|
||||||
AND NOT `owner-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `blocked`)
|
AND NOT `owner-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `blocked` AND `cid` = `owner-id`)
|
||||||
AND NOT (`gravity` = ? AND `author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `ignored`))
|
AND NOT (`gravity` = ? AND `author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `ignored` AND `cid` = `author-id`))
|
||||||
AND NOT (`gravity` = ? AND `owner-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `ignored`))",
|
AND NOT (`gravity` = ? AND `owner-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `ignored` AND `cid` = `owner-id`))",
|
||||||
0, Contact::SHARING, Contact::FRIEND, Item::GRAVITY_PARENT, 0, $uid, $uid, $uid, Item::GRAVITY_PARENT, $uid, Item::GRAVITY_PARENT, $uid]);
|
0, Contact::SHARING, Contact::FRIEND, Item::GRAVITY_PARENT, 0, $uid, $uid, $uid, Item::GRAVITY_PARENT, $uid, Item::GRAVITY_PARENT, $uid]);
|
||||||
|
|
||||||
$select_string = implode(', ', array_map([DBA::class, 'quoteIdentifier'], $selected));
|
$select_string = implode(', ', array_map([DBA::class, 'quoteIdentifier'], $selected));
|
||||||
|
|
|
@ -82,7 +82,7 @@ class Home extends BaseApi
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['remote']) {
|
if ($request['remote']) {
|
||||||
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
|
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-user-view`.`uri-id`)"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['exclude_replies']) {
|
if ($request['exclude_replies']) {
|
||||||
|
|
|
@ -91,7 +91,7 @@ class ListTimeline extends BaseApi
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['remote']) {
|
if ($request['remote']) {
|
||||||
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
|
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-user-view`.`uri-id`)"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$items = Post::selectForUser($uid, ['uri-id'], $condition, $params);
|
$items = Post::selectForUser($uid, ['uri-id'], $condition, $params);
|
||||||
|
|
|
@ -65,7 +65,7 @@ class PublicTimeline extends BaseApi
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['remote']) {
|
if ($request['remote']) {
|
||||||
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
|
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-view`.`uri-id`)"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['only_media']) {
|
if ($request['only_media']) {
|
||||||
|
@ -92,7 +92,7 @@ class PublicTimeline extends BaseApi
|
||||||
|
|
||||||
if (!empty($uid)) {
|
if (!empty($uid)) {
|
||||||
$condition = DBA::mergeConditions($condition,
|
$condition = DBA::mergeConditions($condition,
|
||||||
["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`))", $uid]);
|
["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$items = Post::selectPostsForUser($uid, ['uri-id'], $condition, $params);
|
$items = Post::selectPostsForUser($uid, ['uri-id'], $condition, $params);
|
||||||
|
|
|
@ -77,7 +77,7 @@ class Tag extends BaseApi
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['remote']) {
|
if ($request['remote']) {
|
||||||
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
|
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `tag-search-view`.`uri-id`)"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request['only_media']) {
|
if ($request['only_media']) {
|
||||||
|
|
|
@ -335,7 +335,7 @@ class Community extends BaseModule
|
||||||
$condition[] = $item_id;
|
$condition[] = $item_id;
|
||||||
} else {
|
} else {
|
||||||
if (DI::userSession()->getLocalUserId() && !empty($_REQUEST['no_sharer'])) {
|
if (DI::userSession()->getLocalUserId() && !empty($_REQUEST['no_sharer'])) {
|
||||||
$condition[0] .= " AND NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uid` = ?)";
|
$condition[0] .= " AND NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uid` = ? AND `post-user`.`uri-id` = `post-thread-user-view`.`uri-id`)";
|
||||||
$condition[] = DI::userSession()->getLocalUserId();
|
$condition[] = DI::userSession()->getLocalUserId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,8 @@ use GuzzleHttp\Psr7\Uri;
|
||||||
use SimpleXMLElement;
|
use SimpleXMLElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class contain functions to create and send Diaspora XML files
|
* This class contains functions to communicate via the Diaspora protocol
|
||||||
|
* @see https://diaspora.github.io/diaspora_federation/
|
||||||
*/
|
*/
|
||||||
class Diaspora
|
class Diaspora
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,11 +37,11 @@ class RemoveUnusedAvatars
|
||||||
$sql = "FROM `contact` INNER JOIN `photo` ON `contact`.`id` = `contact-id`
|
$sql = "FROM `contact` INNER JOIN `photo` ON `contact`.`id` = `contact-id`
|
||||||
WHERE `contact`.`uid` = ? AND NOT `self` AND (`photo` != ? OR `thumb` != ? OR `micro` != ?)
|
WHERE `contact`.`uid` = ? AND NOT `self` AND (`photo` != ? OR `thumb` != ? OR `micro` != ?)
|
||||||
AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
|
AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
|
||||||
AND NOT `contact`.`id` IN (SELECT `author-id` FROM `post-user`)
|
AND NOT `contact`.`id` IN (SELECT `author-id` FROM `post-user` WHERE `author-id` = `contact`.`id`)
|
||||||
AND NOT `contact`.`id` IN (SELECT `owner-id` FROM `post-user`)
|
AND NOT `contact`.`id` IN (SELECT `owner-id` FROM `post-user` WHERE `owner-id` = `contact`.`id`)
|
||||||
AND NOT `contact`.`id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL)
|
AND NOT `contact`.`id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL AND `causer-id` = `contact`.`id`)
|
||||||
AND NOT `contact`.`id` IN (SELECT `cid` FROM `post-tag`)
|
AND NOT `contact`.`id` IN (SELECT `cid` FROM `post-tag` WHERE `cid` = `contact`.`id`)
|
||||||
AND NOT `contact`.`id` IN (SELECT `contact-id` FROM `post-user`);";
|
AND NOT `contact`.`id` IN (SELECT `contact-id` FROM `post-user` WHERE `contact-id` = `contact`.`id`);";
|
||||||
|
|
||||||
$ret = DBA::fetchFirst("SELECT COUNT(*) AS `total` " . $sql, 0, '', '', '', 0);
|
$ret = DBA::fetchFirst("SELECT COUNT(*) AS `total` " . $sql, 0, '', '', '', 0);
|
||||||
$total = $ret['total'] ?? 0;
|
$total = $ret['total'] ?? 0;
|
||||||
|
|
|
@ -39,10 +39,14 @@ class RemoveUnusedContacts
|
||||||
{
|
{
|
||||||
$condition = ["`id` != ? AND `uid` = ? AND NOT `self` AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
|
$condition = ["`id` != ? AND `uid` = ? AND NOT `self` AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
|
||||||
AND (NOT `network` IN (?, ?, ?, ?, ?, ?) OR (`archive` AND `success_update` < ?))
|
AND (NOT `network` IN (?, ?, ?, ?, ?, ?) OR (`archive` AND `success_update` < ?))
|
||||||
AND NOT `id` IN (SELECT `author-id` FROM `post-user`) AND NOT `id` IN (SELECT `owner-id` FROM `post-user`)
|
AND NOT `id` IN (SELECT `author-id` FROM `post-user` WHERE `author-id` = `contact`.`id`)
|
||||||
AND NOT `id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL) AND NOT `id` IN (SELECT `cid` FROM `post-tag`)
|
AND NOT `id` IN (SELECT `owner-id` FROM `post-user` WHERE `owner-id` = `contact`.`id`)
|
||||||
AND NOT `id` IN (SELECT `contact-id` FROM `post-user`) AND NOT `id` IN (SELECT `cid` FROM `user-contact`)
|
AND NOT `id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL AND `causer-id` = `contact`.`id`)
|
||||||
AND NOT `id` IN (SELECT `cid` FROM `event`) AND NOT `id` IN (SELECT `contact-id` FROM `group_member`)
|
AND NOT `id` IN (SELECT `cid` FROM `post-tag` WHERE `cid` = `contact`.`id`)
|
||||||
|
AND NOT `id` IN (SELECT `contact-id` FROM `post-user` WHERE `contact-id` = `contact`.`id`)
|
||||||
|
AND NOT `id` IN (SELECT `cid` FROM `user-contact` WHERE `cid` = `contact`.`id`)
|
||||||
|
AND NOT `id` IN (SELECT `cid` FROM `event` WHERE `cid` = `contact`.`id`)
|
||||||
|
AND NOT `id` IN (SELECT `contact-id` FROM `group_member` WHERE `contact-id` = `contact`.`id`)
|
||||||
AND `created` < ?",
|
AND `created` < ?",
|
||||||
0, 0, 0, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL, Protocol::ACTIVITYPUB, DateTimeFormat::utc('now - 365 days'), DateTimeFormat::utc('now - 30 days')];
|
0, 0, 0, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL, Protocol::ACTIVITYPUB, DateTimeFormat::utc('now - 365 days'), DateTimeFormat::utc('now - 30 days')];
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,6 @@ class RemoveUnusedTags
|
||||||
*/
|
*/
|
||||||
public static function execute()
|
public static function execute()
|
||||||
{
|
{
|
||||||
DBA::delete('tag', ["NOT `id` IN (SELECT `tid` FROM `post-category`) AND NOT `id` IN (SELECT `tid` FROM `post-tag`)"]);
|
DBA::delete('tag', ["NOT `id` IN (SELECT `tid` FROM `post-category` WHERE `tid` = `tag`.`id`) AND NOT `id` IN (SELECT `tid` FROM `post-tag` WHERE `tid` = `tag`.`id`)"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user