From 737fe763471bcb6ebd95c318363308a33e28e889 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 10 Nov 2009 08:47:54 -0800 Subject: [PATCH] Performance fix for subscription/subscriber lists based on feedback from ops. Extended subscription table indexes for subscriber and subscribed to include the created field, which is used to sort for display. This lets us skip a filesort and do the join much more efficiently. Alter table from 08to09.sql needs to be run manually (though no ill effects if you forget other than not getting the perf improvement). --- db/08to09.sql | 6 ++++++ db/08to09_pg.sql | 6 ++++++ db/statusnet.sql | 4 ++-- db/statusnet_pg.sql | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/db/08to09.sql b/db/08to09.sql index e6842225bb..1d37a759d8 100644 --- a/db/08to09.sql +++ b/db/08to09.sql @@ -45,3 +45,9 @@ create table login_token ( alter table fave drop index fave_user_id_idx, add index fave_user_id_idx (user_id,modified); + +alter table subscription + drop index subscription_subscriber_idx, + add index subscription_subscriber_idx (subscriber,created), + drop index subscription_subscribed_idx, + add index subscription_subscribed_idx (subscribed,created); diff --git a/db/08to09_pg.sql b/db/08to09_pg.sql index 956c4dee55..004c77b365 100644 --- a/db/08to09_pg.sql +++ b/db/08to09_pg.sql @@ -51,3 +51,9 @@ create table login_token ( alter table fave drop index fave_user_id_idx, add index fave_user_id_idx using btree(user_id,modified); + +alter table subscription + drop index subscription_subscriber_idx, + add index subscription_subscriber_idx using btree(subscriber,created), + drop index subscription_subscribed_idx, + add index subscription_subscribed_idx using btree(subscribed,created); diff --git a/db/statusnet.sql b/db/statusnet.sql index 510c8866ef..2983c67cfc 100644 --- a/db/statusnet.sql +++ b/db/statusnet.sql @@ -107,8 +107,8 @@ create table subscription ( modified timestamp comment 'date this record was modified', constraint primary key (subscriber, subscribed), - index subscription_subscriber_idx (subscriber), - index subscription_subscribed_idx (subscribed), + index subscription_subscriber_idx (subscriber, created), + index subscription_subscribed_idx (subscribed, created), index subscription_token_idx (token) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/db/statusnet_pg.sql b/db/statusnet_pg.sql index 710883e57d..392a6a5f3c 100644 --- a/db/statusnet_pg.sql +++ b/db/statusnet_pg.sql @@ -115,8 +115,8 @@ create table subscription ( primary key (subscriber, subscribed) ); -create index subscription_subscriber_idx on subscription using btree(subscriber); -create index subscription_subscribed_idx on subscription using btree(subscribed); +create index subscription_subscriber_idx on subscription using btree(subscriber,created); +create index subscription_subscribed_idx on subscription using btree(subscribed,created); create sequence notice_seq; create table notice (