I'm trying to speed up this query, and don't understand why it's not using
ix_status_created_at_sort.
created_at_sort is a sorted column I'm using as part of a scrolling cursor for
moving forward/backward through results,
and the status table has ~36000 rows.
SELECT status.text
FROM status
JOIN status_timeline_relationship ON status.id =
status_timeline_relationship.status_id
WHERE
status_timeline_relationship.timeline_id = 2 AND
status.created_at_sort > 123449400901
ORDER BY status.created_at_sort
LIMIT 1 OFFSET 0;
The output of explain query plan:
0|0|1|SEARCH TABLE status_timeline_relationship USING INDEX
ix_status_timeline_relationship_timeline_id (timeline_id=?) (~10 rows)
0|1|0|SEARCH TABLE status USING INDEX ix_status_id (id=?) (~3 rows)
0|0|0|USE TEMP B-TREE FOR ORDER BY
This query runs in about 0.6S.
And the schema:
CREATE TABLE status (
db_id INTEGER NOT NULL,
created_at INTEGER,
created_at_sort INTEGER,
id INTEGER,
coordinates VARCHAR,
favorite_count INTEGER,
favorited BOOLEAN,
filter_level VARCHAR,
geo BOOLEAN,
in_reply_to_screen_name VARCHAR,
in_reply_to_status_id INTEGER,
in_reply_to_user_id INTEGER,
lang VARCHAR,
possibly_sensitive BOOLEAN,
retweet_count INTEGER,
retweeted BOOLEAN,
source VARCHAR,
truncated BOOLEAN,
text VARCHAR(160),
embedded_id INTEGER,
user_id INTEGER,
embedded_ INTEGER,
PRIMARY KEY (db_id),
CHECK (favorited IN (0, 1)),
CHECK (geo IN (0, 1)),
CHECK (possibly_sensitive IN (0, 1)),
CHECK (retweeted IN (0, 1)),
CHECK (truncated IN (0, 1)),
FOREIGN KEY(user_id) REFERENCES user (db_id),
FOREIGN KEY(embedded_) REFERENCES status (db_id)
);
CREATE INDEX ix_status_created_at ON status (created_at);
CREATE INDEX ix_status_created_at_sort ON status (created_at_sort);
CREATE INDEX ix_status_id ON status (id);
CREATE INDEX ix_status_in_reply_to_status_id ON status (in_reply_to_status_id);
CREATE INDEX ix_status_text ON status (text);
CREATE TABLE status_timeline_relationship (
db_id INTEGER NOT NULL,
status_id INTEGER,
timeline_id INTEGER,
PRIMARY KEY (db_id),
FOREIGN KEY(status_id) REFERENCES status (id),
FOREIGN KEY(timeline_id) REFERENCES status_timeline (db_id)
);
CREATE INDEX ix_status_timeline_relationship_timeline_id ON
status_timeline_relationship (timeline_id);
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users