Merge pull request #11522 from annando/performance
Performance: Avoid queries where there is no media or category
This commit is contained in:
commit
65516a1d3a
6 changed files with 28 additions and 6 deletions
10
database.sql
10
database.sql
|
@ -1,6 +1,6 @@
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
-- Friendica 2022.05-rc (Siberian Iris)
|
-- Friendica 2022.05-rc (Siberian Iris)
|
||||||
-- DB_UPDATE_VERSION 1463
|
-- DB_UPDATE_VERSION 1464
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -1816,6 +1816,8 @@ CREATE VIEW `post-user-view` AS SELECT
|
||||||
`post-question`.`multiple` AS `question-multiple`,
|
`post-question`.`multiple` AS `question-multiple`,
|
||||||
`post-question`.`voters` AS `question-voters`,
|
`post-question`.`voters` AS `question-voters`,
|
||||||
`post-question`.`end-time` AS `question-end-time`,
|
`post-question`.`end-time` AS `question-end-time`,
|
||||||
|
EXISTS(SELECT `uri-id` FROM `post-category` WHERE `post-category`.`uri-id` = `post-user`.`uri-id` AND `post-category`.`uid` = `post-user`.`uid`) AS `has-categories`,
|
||||||
|
EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-user`.`uri-id`) AS `has-media`,
|
||||||
`diaspora-interaction`.`interaction` AS `signed_text`,
|
`diaspora-interaction`.`interaction` AS `signed_text`,
|
||||||
`parent-item-uri`.`guid` AS `parent-guid`,
|
`parent-item-uri`.`guid` AS `parent-guid`,
|
||||||
`parent-post`.`network` AS `parent-network`,
|
`parent-post`.`network` AS `parent-network`,
|
||||||
|
@ -1985,6 +1987,8 @@ CREATE VIEW `post-thread-user-view` AS SELECT
|
||||||
`post-question`.`multiple` AS `question-multiple`,
|
`post-question`.`multiple` AS `question-multiple`,
|
||||||
`post-question`.`voters` AS `question-voters`,
|
`post-question`.`voters` AS `question-voters`,
|
||||||
`post-question`.`end-time` AS `question-end-time`,
|
`post-question`.`end-time` AS `question-end-time`,
|
||||||
|
EXISTS(SELECT `uri-id` FROM `post-category` WHERE `post-category`.`uri-id` = `post-thread-user`.`uri-id` AND `post-category`.`uid` = `post-thread-user`.`uid`) AS `has-categories`,
|
||||||
|
EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread-user`.`uri-id`) AS `has-media`,
|
||||||
`diaspora-interaction`.`interaction` AS `signed_text`,
|
`diaspora-interaction`.`interaction` AS `signed_text`,
|
||||||
`parent-item-uri`.`guid` AS `parent-guid`,
|
`parent-item-uri`.`guid` AS `parent-guid`,
|
||||||
`parent-post`.`network` AS `parent-network`,
|
`parent-post`.`network` AS `parent-network`,
|
||||||
|
@ -2120,6 +2124,8 @@ CREATE VIEW `post-view` AS SELECT
|
||||||
`post-question`.`multiple` AS `question-multiple`,
|
`post-question`.`multiple` AS `question-multiple`,
|
||||||
`post-question`.`voters` AS `question-voters`,
|
`post-question`.`voters` AS `question-voters`,
|
||||||
`post-question`.`end-time` AS `question-end-time`,
|
`post-question`.`end-time` AS `question-end-time`,
|
||||||
|
0 AS `has-categories`,
|
||||||
|
EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post`.`uri-id`) AS `has-media`,
|
||||||
`diaspora-interaction`.`interaction` AS `signed_text`,
|
`diaspora-interaction`.`interaction` AS `signed_text`,
|
||||||
`parent-item-uri`.`guid` AS `parent-guid`,
|
`parent-item-uri`.`guid` AS `parent-guid`,
|
||||||
`parent-post`.`network` AS `parent-network`,
|
`parent-post`.`network` AS `parent-network`,
|
||||||
|
@ -2251,6 +2257,8 @@ CREATE VIEW `post-thread-view` AS SELECT
|
||||||
`post-question`.`multiple` AS `question-multiple`,
|
`post-question`.`multiple` AS `question-multiple`,
|
||||||
`post-question`.`voters` AS `question-voters`,
|
`post-question`.`voters` AS `question-voters`,
|
||||||
`post-question`.`end-time` AS `question-end-time`,
|
`post-question`.`end-time` AS `question-end-time`,
|
||||||
|
0 AS `has-categories`,
|
||||||
|
EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread`.`uri-id`) AS `has-media`,
|
||||||
`diaspora-interaction`.`interaction` AS `signed_text`,
|
`diaspora-interaction`.`interaction` AS `signed_text`,
|
||||||
`parent-item-uri`.`guid` AS `parent-guid`,
|
`parent-item-uri`.`guid` AS `parent-guid`,
|
||||||
`parent-post`.`network` AS `parent-network`,
|
`parent-post`.`network` AS `parent-network`,
|
||||||
|
|
|
@ -93,7 +93,7 @@ class Item
|
||||||
|
|
||||||
$uid = $item['uid'] ?: $uid;
|
$uid = $item['uid'] ?: $uid;
|
||||||
|
|
||||||
if (!Post\Category::existsForURIId($item['uri-id'], $uid)) {
|
if (empty($item['has-categories'])) {
|
||||||
return [$categories, $folders];
|
return [$categories, $folders];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ class Item
|
||||||
'event-summary', 'event-desc', 'event-location', 'event-type',
|
'event-summary', 'event-desc', 'event-location', 'event-type',
|
||||||
'event-nofinish', 'event-ignore', 'event-id',
|
'event-nofinish', 'event-ignore', 'event-id',
|
||||||
"question-id", "question-multiple", "question-voters", "question-end-time",
|
"question-id", "question-multiple", "question-voters", "question-end-time",
|
||||||
|
"has-categories", "has-media",
|
||||||
'delivery_queue_count', 'delivery_queue_done', 'delivery_queue_failed'
|
'delivery_queue_count', 'delivery_queue_done', 'delivery_queue_failed'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -2788,7 +2789,7 @@ class Item
|
||||||
$shared_item = Post::selectFirst(['uri-id', 'plink'], ['guid' => $shared['guid']]);
|
$shared_item = Post::selectFirst(['uri-id', 'plink'], ['guid' => $shared['guid']]);
|
||||||
$shared_uri_id = $shared_item['uri-id'] ?? 0;
|
$shared_uri_id = $shared_item['uri-id'] ?? 0;
|
||||||
$shared_links = [strtolower($shared_item['plink'] ?? '')];
|
$shared_links = [strtolower($shared_item['plink'] ?? '')];
|
||||||
$shared_attachments = Post\Media::splitAttachments($shared_uri_id, $shared['guid']);
|
$shared_attachments = Post\Media::splitAttachments($shared_uri_id, $shared['guid'], [], $item['has-media']);
|
||||||
$shared_links = array_merge($shared_links, array_column($shared_attachments['visual'], 'url'));
|
$shared_links = array_merge($shared_links, array_column($shared_attachments['visual'], 'url'));
|
||||||
$shared_links = array_merge($shared_links, array_column($shared_attachments['link'], 'url'));
|
$shared_links = array_merge($shared_links, array_column($shared_attachments['link'], 'url'));
|
||||||
$shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url'));
|
$shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url'));
|
||||||
|
@ -2797,7 +2798,7 @@ class Item
|
||||||
$shared_uri_id = 0;
|
$shared_uri_id = 0;
|
||||||
$shared_links = [];
|
$shared_links = [];
|
||||||
}
|
}
|
||||||
$attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '', $shared_links);
|
$attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '', $shared_links, $item['has-media']);
|
||||||
$item['body'] = self::replaceVisualAttachments($attachments, $item['body'] ?? '');
|
$item['body'] = self::replaceVisualAttachments($attachments, $item['body'] ?? '');
|
||||||
|
|
||||||
$item['body'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']);
|
$item['body'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']);
|
||||||
|
|
|
@ -547,12 +547,17 @@ class Media
|
||||||
* @param int $uri_id
|
* @param int $uri_id
|
||||||
* @param string $guid
|
* @param string $guid
|
||||||
* @param array $links list of links that shouldn't be added
|
* @param array $links list of links that shouldn't be added
|
||||||
|
* @param bool $has_media
|
||||||
* @return array attachments
|
* @return array attachments
|
||||||
*/
|
*/
|
||||||
public static function splitAttachments(int $uri_id, string $guid = '', array $links = [])
|
public static function splitAttachments(int $uri_id, string $guid = '', array $links = [], bool $has_media = true)
|
||||||
{
|
{
|
||||||
$attachments = ['visual' => [], 'link' => [], 'additional' => []];
|
$attachments = ['visual' => [], 'link' => [], 'additional' => []];
|
||||||
|
|
||||||
|
if (!$has_media) {
|
||||||
|
return $attachments;
|
||||||
|
}
|
||||||
|
|
||||||
$media = self::getByURIId($uri_id);
|
$media = self::getByURIId($uri_id);
|
||||||
if (empty($media)) {
|
if (empty($media)) {
|
||||||
return $attachments;
|
return $attachments;
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
if (!defined('DB_UPDATE_VERSION')) {
|
if (!defined('DB_UPDATE_VERSION')) {
|
||||||
define('DB_UPDATE_VERSION', 1463);
|
define('DB_UPDATE_VERSION', 1464);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -194,6 +194,8 @@
|
||||||
"question-multiple" => ["post-question", "multiple"],
|
"question-multiple" => ["post-question", "multiple"],
|
||||||
"question-voters" => ["post-question", "voters"],
|
"question-voters" => ["post-question", "voters"],
|
||||||
"question-end-time" => ["post-question", "end-time"],
|
"question-end-time" => ["post-question", "end-time"],
|
||||||
|
"has-categories" => "EXISTS(SELECT `uri-id` FROM `post-category` WHERE `post-category`.`uri-id` = `post-user`.`uri-id` AND `post-category`.`uid` = `post-user`.`uid`)",
|
||||||
|
"has-media" => "EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-user`.`uri-id`)",
|
||||||
"signed_text" => ["diaspora-interaction", "interaction"],
|
"signed_text" => ["diaspora-interaction", "interaction"],
|
||||||
"parent-guid" => ["parent-item-uri", "guid"],
|
"parent-guid" => ["parent-item-uri", "guid"],
|
||||||
"parent-network" => ["parent-post", "network"],
|
"parent-network" => ["parent-post", "network"],
|
||||||
|
@ -361,6 +363,8 @@
|
||||||
"question-multiple" => ["post-question", "multiple"],
|
"question-multiple" => ["post-question", "multiple"],
|
||||||
"question-voters" => ["post-question", "voters"],
|
"question-voters" => ["post-question", "voters"],
|
||||||
"question-end-time" => ["post-question", "end-time"],
|
"question-end-time" => ["post-question", "end-time"],
|
||||||
|
"has-categories" => "EXISTS(SELECT `uri-id` FROM `post-category` WHERE `post-category`.`uri-id` = `post-thread-user`.`uri-id` AND `post-category`.`uid` = `post-thread-user`.`uid`)",
|
||||||
|
"has-media" => "EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread-user`.`uri-id`)",
|
||||||
"signed_text" => ["diaspora-interaction", "interaction"],
|
"signed_text" => ["diaspora-interaction", "interaction"],
|
||||||
"parent-guid" => ["parent-item-uri", "guid"],
|
"parent-guid" => ["parent-item-uri", "guid"],
|
||||||
"parent-network" => ["parent-post", "network"],
|
"parent-network" => ["parent-post", "network"],
|
||||||
|
@ -494,6 +498,8 @@
|
||||||
"question-multiple" => ["post-question", "multiple"],
|
"question-multiple" => ["post-question", "multiple"],
|
||||||
"question-voters" => ["post-question", "voters"],
|
"question-voters" => ["post-question", "voters"],
|
||||||
"question-end-time" => ["post-question", "end-time"],
|
"question-end-time" => ["post-question", "end-time"],
|
||||||
|
"has-categories" => "0",
|
||||||
|
"has-media" => "EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post`.`uri-id`)",
|
||||||
"signed_text" => ["diaspora-interaction", "interaction"],
|
"signed_text" => ["diaspora-interaction", "interaction"],
|
||||||
"parent-guid" => ["parent-item-uri", "guid"],
|
"parent-guid" => ["parent-item-uri", "guid"],
|
||||||
"parent-network" => ["parent-post", "network"],
|
"parent-network" => ["parent-post", "network"],
|
||||||
|
@ -623,6 +629,8 @@
|
||||||
"question-multiple" => ["post-question", "multiple"],
|
"question-multiple" => ["post-question", "multiple"],
|
||||||
"question-voters" => ["post-question", "voters"],
|
"question-voters" => ["post-question", "voters"],
|
||||||
"question-end-time" => ["post-question", "end-time"],
|
"question-end-time" => ["post-question", "end-time"],
|
||||||
|
"has-categories" => "0",
|
||||||
|
"has-media" => "EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread`.`uri-id`)",
|
||||||
"signed_text" => ["diaspora-interaction", "interaction"],
|
"signed_text" => ["diaspora-interaction", "interaction"],
|
||||||
"parent-guid" => ["parent-item-uri", "guid"],
|
"parent-guid" => ["parent-item-uri", "guid"],
|
||||||
"parent-network" => ["parent-post", "network"],
|
"parent-network" => ["parent-post", "network"],
|
||||||
|
|
Loading…
Reference in a new issue