From: Michael Date: Mon, 16 May 2022 17:06:58 +0000 (+0000) Subject: Performance: Avoid queries where there is no media or category X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=4daae255d86a3034796497a6aa03c6aef42d6901;p=friendica.git Performance: Avoid queries where there is no media or category --- diff --git a/database.sql b/database.sql index b9e9d284f2..f2f9a89e2e 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- 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`.`voters` AS `question-voters`, `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`, `parent-item-uri`.`guid` AS `parent-guid`, `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`.`voters` AS `question-voters`, `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`, `parent-item-uri`.`guid` AS `parent-guid`, `parent-post`.`network` AS `parent-network`, @@ -2120,6 +2124,8 @@ CREATE VIEW `post-view` AS SELECT `post-question`.`multiple` AS `question-multiple`, `post-question`.`voters` AS `question-voters`, `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`, `parent-item-uri`.`guid` AS `parent-guid`, `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`.`voters` AS `question-voters`, `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`, `parent-item-uri`.`guid` AS `parent-guid`, `parent-post`.`network` AS `parent-network`, diff --git a/src/Content/Item.php b/src/Content/Item.php index 240de4c741..99dda25a03 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -93,7 +93,7 @@ class Item $uid = $item['uid'] ?: $uid; - if (!Post\Category::existsForURIId($item['uri-id'], $uid)) { + if (empty($item['has-categories'])) { return [$categories, $folders]; } diff --git a/src/Model/Item.php b/src/Model/Item.php index 2435e15c2a..c88b35a5d2 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -97,6 +97,7 @@ class Item 'event-summary', 'event-desc', 'event-location', 'event-type', 'event-nofinish', 'event-ignore', 'event-id', "question-id", "question-multiple", "question-voters", "question-end-time", + "has-categories", "has-media", '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_uri_id = $shared_item['uri-id'] ?? 0; $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['link'], 'url')); $shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url')); @@ -2797,7 +2798,7 @@ class Item $shared_uri_id = 0; $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'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']); diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index b783fb6a4f..78f27b7a09 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -547,12 +547,17 @@ class Media * @param int $uri_id * @param string $guid * @param array $links list of links that shouldn't be added + * @param bool $has_media * @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' => []]; + if (!$has_media) { + return $attachments; + } + $media = self::getByURIId($uri_id); if (empty($media)) { return $attachments; diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index f135239603..bf85bb56c7 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -55,7 +55,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1463); + define('DB_UPDATE_VERSION', 1464); } return [ diff --git a/static/dbview.config.php b/static/dbview.config.php index e2e29d8f4f..30e17baf81 100644 --- a/static/dbview.config.php +++ b/static/dbview.config.php @@ -194,6 +194,8 @@ "question-multiple" => ["post-question", "multiple"], "question-voters" => ["post-question", "voters"], "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"], "parent-guid" => ["parent-item-uri", "guid"], "parent-network" => ["parent-post", "network"], @@ -361,6 +363,8 @@ "question-multiple" => ["post-question", "multiple"], "question-voters" => ["post-question", "voters"], "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"], "parent-guid" => ["parent-item-uri", "guid"], "parent-network" => ["parent-post", "network"], @@ -494,6 +498,8 @@ "question-multiple" => ["post-question", "multiple"], "question-voters" => ["post-question", "voters"], "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"], "parent-guid" => ["parent-item-uri", "guid"], "parent-network" => ["parent-post", "network"], @@ -623,6 +629,8 @@ "question-multiple" => ["post-question", "multiple"], "question-voters" => ["post-question", "voters"], "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"], "parent-guid" => ["parent-item-uri", "guid"], "parent-network" => ["parent-post", "network"],