以下是常见查询的mysql explain命令的屏幕截图: http://cl.ly/3r34251M320A1P2s3e1Y
我有3个不同的表,我必须联合起来提取我想要的数据。这是使用activerecord的主要CI模型代码
$this->db->select('articles.id, articles.title, articles.link, articles.updated_time, articles.created_time, shows.network,shows.show_id, shows.name');
$this->db->from('articles')->order_by('updated_time','desc')->offset($offset)->limit($limit);
$this->db->join('labels', 'articles.remote_id = labels.articleid');
$this->db->join('shows', 'shows.show_id = labels.showid');
有人可以建议任何改进架构或查询性能的方法吗?
由于
答案 0 :(得分:0)
使查询变慢的原因是mysql使用临时表和filesort这意味着它无法有效地使用索引并创建临时表(在磁盘上多次!)。 当您使用一个索引连接表并使用另一个索引对其进行排序或在另一个索引上使用条件时,通常会发生这种情况。 您可以做的第一件事是阅读有关此问题的信息,看看您是否至少可以避免使用临时磁盘表。 How mysql uses temp tables