I cannot seem to properly optimize this statement used to show topics across all forums that have been recently replied to: SELECT t.topic_id, t.topic_title, t.topic_sticky, t.topic_views, t.num_posts, f.forum_icon, f.forum_name, p.poster_name, p.post_time FROM minibb_topics AS t LEFT JOIN minibb_forums AS f ON t.forum_id = f.forum_id INNER JOIN minibb_posts AS p ON p.post_id = t.topic_last_post_id WHERE 5 >= forum_level_to_view && ( forum_site =0 || forum_site =1 ) ORDER BY t.topic_sticky DESC , t.topic_last_post_id DESC LIMIT 20 I have isolated the issue to the ORDER BY clause. If I remove the ORDER BY clause, the query takes 1/10th of the time to execute. Both ORDER BY fields are indexed. Also, if I limit the query to one forum such as, "WHERE f.forum_id = 1", the statement executes in 1/10th of the time. This is the explain: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE f ALL PRIMARY,forum_level_to_view,forum_site NULL NULL NULL 12 Using where; Using temporary; Using filesort 1 SIMPLE t ref forum_id,topic_last_post_id forum_id 2 aanime_aanimedb.f.forum_id 651 1 SIMPLE p eq_ref PRIMARY PRIMARY 4 aanime_aanimedb.t.topic_last_post_id 1 This is the table structure: -- -- Table structure for table 'minibb_forums' -- CREATE TABLE minibb_forums ( forum_id smallint(6) NOT NULL auto_increment, forum_name varchar(150) NOT NULL default '', forum_desc varchar(255) NOT NULL default '', forum_order tinyint(2) NOT NULL default '0', forum_icon varchar(255) NOT NULL default 'default.gif', forum_group varchar(30) NOT NULL default '', forum_site tinyint(1) NOT NULL default '0', forum_level_to_view tinyint(2) unsigned NOT NULL default '0', forum_level_to_post tinyint(2) NOT NULL default '0', forum_level_to_topic tinyint(2) NOT NULL default '0', num_topics mediumint(8) unsigned NOT NULL default '0', num_posts mediumint(8) unsigned NOT NULL default '0', is_spam tinyint(1) NOT NULL default '0', PRIMARY KEY (forum_id), KEY forum_order (forum_order), KEY forum_level_to_topic (forum_level_to_topic), KEY forum_level_to_view (forum_level_to_view), KEY forum_site (forum_site) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Table structure for table 'minibb_posts' -- CREATE TABLE minibb_posts ( post_id int(11) NOT NULL auto_increment, topic_id int(10) NOT NULL default '1', poster_name varchar(16) NOT NULL default 'Anonymous', post_text text NOT NULL, post_time datetime NOT NULL default '0000-00-00 00:00:00', poster_ip varchar(15) NOT NULL default '', post_status tinyint(1) NOT NULL default '0', PRIMARY KEY (post_id), KEY topic_id (topic_id), KEY poster_name (poster_name) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Table structure for table 'minibb_topics' -- CREATE TABLE minibb_topics ( topic_id int(10) NOT NULL auto_increment, topic_title varchar(100) NOT NULL default '', topic_sticky tinyint(1) NOT NULL default '0', topic_poster_name varchar(16) NOT NULL default 'Anonymous', topic_time datetime NOT NULL default '0000-00-00 00:00:00', topic_views mediumint(9) NOT NULL default '0', forum_id smallint(6) NOT NULL default '1', topic_status tinyint(1) NOT NULL default '0', topic_last_post_id int(10) NOT NULL default '1', num_posts mediumint(8) unsigned NOT NULL default '0', PRIMARY KEY (topic_id), KEY forum_id (forum_id), KEY topic_poster_name (topic_poster_name), KEY topic_sticky (topic_sticky), KEY topic_last_post_id (topic_last_post_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Does anyone have any ideas about this? Thanks.