From 9d0687b0559095f270a55af3467c53ad29bfd4c7 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 10 Nov 2009 08:23:24 -0800 Subject: Adjusting indexes to make favorites query more efficient, based on feedback from ops. fave_user_id_idx index changed from (user_id) to (user_id,modified), so the timestamp ordering can be done straight from the index while we're looking up the user's notices. Added to 08to09.sql and 08to09_pg.sql; may need to be run manually by folks doing development. (No harm if you don't update it, the favorites tab/rss feed will just stay inefficent.) --- db/08to09.sql | 3 +++ db/08to09_pg.sql | 3 +++ db/statusnet.sql | 2 +- db/statusnet_pg.sql | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) (limited to 'db') diff --git a/db/08to09.sql b/db/08to09.sql index a0e37f0f1..e6842225b 100644 --- a/db/08to09.sql +++ b/db/08to09.sql @@ -42,3 +42,6 @@ create table login_token ( constraint primary key (user_id) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; +alter table fave + drop index fave_user_id_idx, + add index fave_user_id_idx (user_id,modified); diff --git a/db/08to09_pg.sql b/db/08to09_pg.sql index 197fcabfd..956c4dee5 100644 --- a/db/08to09_pg.sql +++ b/db/08to09_pg.sql @@ -48,3 +48,6 @@ create table login_token ( constraint primary key (user_id) ); +alter table fave + drop index fave_user_id_idx, + add index fave_user_id_idx using btree(user_id,modified); diff --git a/db/statusnet.sql b/db/statusnet.sql index 3ed4e2c48..510c8866e 100644 --- a/db/statusnet.sql +++ b/db/statusnet.sql @@ -165,7 +165,7 @@ create table fave ( constraint primary key (notice_id, user_id), index fave_notice_id_idx (notice_id), - index fave_user_id_idx (user_id), + index fave_user_id_idx (user_id,modified), index fave_modified_idx (modified) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/db/statusnet_pg.sql b/db/statusnet_pg.sql index 0e5e96c32..710883e57 100644 --- a/db/statusnet_pg.sql +++ b/db/statusnet_pg.sql @@ -171,7 +171,7 @@ create table fave ( ); create index fave_notice_id_idx on fave using btree(notice_id); -create index fave_user_id_idx on fave using btree(user_id); +create index fave_user_id_idx on fave using btree(user_id,modified); create index fave_modified_idx on fave using btree(modified); /* tables for OAuth */ -- cgit v1.2.3-54-g00ecf From 737fe763471bcb6ebd95c318363308a33e28e889 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 10 Nov 2009 08:47:54 -0800 Subject: 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(-) (limited to 'db') diff --git a/db/08to09.sql b/db/08to09.sql index e6842225b..1d37a759d 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 956c4dee5..004c77b36 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 510c8866e..2983c67cf 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 710883e57..392a6a5f3 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 ( -- cgit v1.2.3-54-g00ecf