From 4c35a6b0d7e2f2431571d63888816ecff446d258 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 2 Jan 2012 16:54:37 -0800 Subject: conversation sql optimisations --- mod/network.php | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) (limited to 'mod/network.php') diff --git a/mod/network.php b/mod/network.php index 55f5a8c95..b493c419b 100644 --- a/mod/network.php +++ b/mod/network.php @@ -15,14 +15,6 @@ function network_init(&$a) { $search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : ''); - // We need a better way of managing a growing argument list - - // moved into savedsearches() - // $srchurl = '/network' - // . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') - // . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '') - // . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : ''); - if(x($_GET,'save')) { $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1", intval(local_user()), @@ -46,14 +38,10 @@ function network_init(&$a) { // search terms header if(x($_GET,'search')) { - $a->page['content'] .= '

Search Results For: ' . $search . '

'; + $a->page['content'] .= '

' . t('Search Results For:') . ' ' . $search . '

'; } $a->page['aside'] .= group_side('network','network',true,$group_id); - - // moved to saved searches to have it in the same div - //$a->page['aside'] .= search($search,'netsearch-box',$srchurl,true); - $a->page['aside'] .= saved_searches($search); } @@ -275,12 +263,6 @@ function network_content(&$a, $update = 0) { $sql_options = (($star) ? " and starred = 1 " : ''); $sql_options .= (($bmark) ? " and bookmark = 1 " : ''); - - $sql_new = ''; - $sql_items = ''; - $sql_update = ''; - - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) "; if($group) { @@ -467,16 +449,18 @@ function network_content(&$a, $update = 0) { `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, (SELECT `p`.`id`,`p`.`created`,`p`.`commented` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact` + FROM `item`, `contact` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s ) - $sql_extra - ORDER BY `parentitem`.$ordering DESC, `parentitem`.`id` ASC, `item`.`gravity` ASC, `item`.`created` ASC ", + AND `item`.`parent` IN ( %s ) + $sql_extra ", intval(local_user()), dbesc($parents_str) ); + + $items = conv_sort($items,$ordering); + } } -- cgit v1.2.3 From f4b1d335a571365748ee348ed2b8ac6e1c6670db Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 2 Jan 2012 18:40:38 -0800 Subject: sql optimisation cont. --- mod/network.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'mod/network.php') diff --git a/mod/network.php b/mod/network.php index b493c419b..6f53a24f8 100644 --- a/mod/network.php +++ b/mod/network.php @@ -263,7 +263,7 @@ function network_content(&$a, $update = 0) { $sql_options = (($star) ? " and starred = 1 " : ''); $sql_options .= (($bmark) ? " and bookmark = 1 " : ''); - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) "; + $sql_extra = $sql_options; if($group) { $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -287,7 +287,7 @@ function network_content(&$a, $update = 0) { info( t('Group is empty')); } - $sql_extra = " AND `item`.`parent` IN ( SELECT DISTINCT(`parent`) FROM `item` WHERE 1 $sql_options AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) "; + $sql_extra = " AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' ) $sql_options "; $o = '

' . t('Group: ') . $r[0]['name'] . '

' . $o; } elseif($cid) { @@ -297,7 +297,7 @@ function network_content(&$a, $update = 0) { intval($cid) ); if(count($r)) { - $sql_extra = " AND `item`.`parent` IN ( SELECT DISTINCT(`parent`) FROM `item` WHERE 1 $sql_options AND `contact-id` = " . intval($cid) . " ) "; + $sql_extra = " AND `contact-id` = " . intval($cid) . " $sql_options "; $o = '

' . t('Contact: ') . $r[0]['name'] . '

' . $o; if($r[0]['network'] === NETWORK_OSTATUS && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { notice( t('Private messages to this person are at risk of public disclosure.') . EOL); @@ -350,14 +350,13 @@ function network_content(&$a, $update = 0) { $myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` regexp '%s' or `tag` regexp '%s' or tag regexp '%s' )) ", + $sql_extra .= sprintf(" AND ( `author-link` regexp '%s' or `tag` regexp '%s' or tag regexp '%s' ) ", dbesc($myurl . '$'), dbesc($myurl . '\\]'), dbesc($diasp_url . '\\]') ); } - if($update) { // only setup pagination on initial page view -- cgit v1.2.3 From 71377291babfb74c238e074a270a3f50679103bf Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 2 Jan 2012 18:50:28 -0800 Subject: that didn't work - revert --- mod/network.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'mod/network.php') diff --git a/mod/network.php b/mod/network.php index 6f53a24f8..b493c419b 100644 --- a/mod/network.php +++ b/mod/network.php @@ -263,7 +263,7 @@ function network_content(&$a, $update = 0) { $sql_options = (($star) ? " and starred = 1 " : ''); $sql_options .= (($bmark) ? " and bookmark = 1 " : ''); - $sql_extra = $sql_options; + $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) "; if($group) { $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -287,7 +287,7 @@ function network_content(&$a, $update = 0) { info( t('Group is empty')); } - $sql_extra = " AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' ) $sql_options "; + $sql_extra = " AND `item`.`parent` IN ( SELECT DISTINCT(`parent`) FROM `item` WHERE 1 $sql_options AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) "; $o = '

' . t('Group: ') . $r[0]['name'] . '

' . $o; } elseif($cid) { @@ -297,7 +297,7 @@ function network_content(&$a, $update = 0) { intval($cid) ); if(count($r)) { - $sql_extra = " AND `contact-id` = " . intval($cid) . " $sql_options "; + $sql_extra = " AND `item`.`parent` IN ( SELECT DISTINCT(`parent`) FROM `item` WHERE 1 $sql_options AND `contact-id` = " . intval($cid) . " ) "; $o = '

' . t('Contact: ') . $r[0]['name'] . '

' . $o; if($r[0]['network'] === NETWORK_OSTATUS && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { notice( t('Private messages to this person are at risk of public disclosure.') . EOL); @@ -350,13 +350,14 @@ function network_content(&$a, $update = 0) { $myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - $sql_extra .= sprintf(" AND ( `author-link` regexp '%s' or `tag` regexp '%s' or tag regexp '%s' ) ", + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` regexp '%s' or `tag` regexp '%s' or tag regexp '%s' )) ", dbesc($myurl . '$'), dbesc($myurl . '\\]'), dbesc($diasp_url . '\\]') ); } + if($update) { // only setup pagination on initial page view -- cgit v1.2.3 From 0db637bf006ba1869ee72239c7d9964894cdf575 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 2 Jan 2012 19:33:26 -0800 Subject: hopefully this will speed up the network updates a wee bit more --- mod/network.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'mod/network.php') diff --git a/mod/network.php b/mod/network.php index b493c419b..397a701da 100644 --- a/mod/network.php +++ b/mod/network.php @@ -263,7 +263,11 @@ function network_content(&$a, $update = 0) { $sql_options = (($star) ? " and starred = 1 " : ''); $sql_options .= (($bmark) ? " and bookmark = 1 " : ''); - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) "; + // We'll need the following line if starred/bookmarks are allowed in comments in the future + // $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) "; + + // Otherwise, this is a bit faster: + $sql_extra = $sql_options; if($group) { $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -414,7 +418,7 @@ function network_content(&$a, $update = 0) { // Fetch a page full of parent items for this page if($update) { - $r = q("SELECT distinct(`parent`) AS `item_id`, `contact`.`uid` AS `contact_uid` + $r = q("SELECT `parent` AS `item_id`, `contact`.`uid` AS `contact_uid` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`unseen` = 1 @@ -442,7 +446,8 @@ function network_content(&$a, $update = 0) { if(count($r)) { foreach($r as $rr) - $parents_arr[] = $rr['item_id']; + if(! array_key_exists($rr['item_id'],$parents_arr)) + $parents_arr[] = $rr['item_id']; $parents_str = implode(', ', $parents_arr); $items = q("SELECT `item`.*, `item`.`id` AS `item_id`, -- cgit v1.2.3