summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-12-17 17:13:21 -0800
committerBrion Vibber <brion@pobox.com>2010-12-17 17:13:21 -0800
commitd8a3a88ec8eae3134694c98e5a9ae42bc30b289f (patch)
tree22554406da875404d3417edd91eaeaeef0bb693c /db
parentbf59eaf602c8319d5ae99d9809b4d4867cb632cd (diff)
parentfb8312ebf4537033077917d0003f716206d0d23d (diff)
Merge branch '0.9.x' into 1.0.x
Conflicts: classes/Memcached_DataObject.php
Diffstat (limited to 'db')
-rw-r--r--db/096to097.sql26
-rw-r--r--db/statusnet.sql39
2 files changed, 57 insertions, 8 deletions
diff --git a/db/096to097.sql b/db/096to097.sql
new file mode 100644
index 000000000..209a3a881
--- /dev/null
+++ b/db/096to097.sql
@@ -0,0 +1,26 @@
+-- Add indexes for sorting changes in 0.9.7
+
+-- Allows sorting public timeline, api/statuses/repeats, and conversations by timestamp efficiently
+alter table notice
+ add index notice_created_id_is_local_idx (created,id,is_local),
+
+ add index notice_repeat_of_created_id_idx (repeat_of, created, id),
+ drop index notice_repeatof_idx,
+
+ add index notice_conversation_created_id_idx (conversation, created, id),
+ drop index notice_conversation_idx;
+
+-- Allows sorting tag-filtered public timeline by timestamp efficiently
+alter table notice_tag add index notice_tag_tag_created_notice_id_idx (tag, created, notice_id);
+
+-- Needed for sorting reply/mentions timelines
+alter table reply add index reply_profile_id_modified_notice_id_idx (profile_id, modified, notice_id);
+
+-- Needed for sorting group messages by timestamp
+alter table group_inbox add index group_inbox_group_id_created_notice_id_idx (group_id, created, notice_id);
+
+-- Helps make some reverse role lookups more efficient if there's a lot of assigned accounts
+alter table profile_role add index profile_role_role_created_profile_id_idx (role, created, profile_id);
+
+-- Fix for sorting a user's group memberships by order joined
+alter table group_member add index group_member_profile_id_created_idx (profile_id, created);
diff --git a/db/statusnet.sql b/db/statusnet.sql
index 5426ace92..debe6f095 100644
--- a/db/statusnet.sql
+++ b/db/statusnet.sql
@@ -126,11 +126,21 @@ create table notice (
location_ns integer comment 'namespace for location',
repeat_of integer comment 'notice this is a repeat of' references notice (id),
+ -- For public timeline...
+ index notice_created_id_is_local_idx (created,id,is_local),
+
+ -- For profile timelines...
index notice_profile_id_idx (profile_id,created,id),
- index notice_conversation_idx (conversation),
- index notice_created_idx (created),
+
+ -- For api/statuses/repeats...
+ index notice_repeat_of_created_id_idx (repeat_of, created, id),
+
+ -- For conversation views
+ index notice_conversation_created_id_idx (conversation, created, id),
+
+ -- Are these needed/used?
index notice_replyto_idx (reply_to),
- index notice_repeatof_idx (repeat_of),
+
FULLTEXT(content)
) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
@@ -151,7 +161,10 @@ create table reply (
constraint primary key (notice_id, profile_id),
index reply_notice_id_idx (notice_id),
index reply_profile_id_idx (profile_id),
- index reply_replied_id_idx (replied_id)
+ index reply_replied_id_idx (replied_id),
+
+ -- Needed for sorting reply/mentions timelines
+ index reply_profile_id_modified_notice_id_idx (profile_id, modified, notice_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
@@ -296,7 +309,10 @@ create table notice_tag (
constraint primary key (tag, notice_id),
index notice_tag_created_idx (created),
- index notice_tag_notice_id_idx (notice_id)
+ index notice_tag_notice_id_idx (notice_id),
+
+ -- For sorting tag-filtered public timeline
+ index notice_tag_tag_created_notice_id_idx (tag, created, notice_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
/* Synching with foreign services */
@@ -442,7 +458,10 @@ create table group_member (
constraint primary key (group_id, profile_id),
index group_member_profile_id_idx (profile_id),
- index group_member_created_idx (created)
+ index group_member_created_idx (created),
+
+ -- To pull up a list of someone's groups in order joined
+ index group_member_profile_id_created_idx (profile_id, created)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
@@ -463,7 +482,10 @@ create table group_inbox (
constraint primary key (group_id, notice_id),
index group_inbox_created_idx (created),
- index group_inbox_notice_id_idx (notice_id)
+ index group_inbox_notice_id_idx (notice_id),
+
+ -- Needed for sorting group messages by timestamp
+ index group_inbox_group_id_created_notice_id_idx (group_id, created, notice_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
@@ -603,7 +625,8 @@ create table profile_role (
role varchar(32) not null comment 'string representing the role',
created datetime not null comment 'date the role was granted',
- constraint primary key (profile_id, role)
+ constraint primary key (profile_id, role),
+ index profile_role_role_created_profile_id_idx (role, created, profile_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;