许多LEFT Joins(7)导致超时 - 另一种方法是执行此操作或使用代码问题?

时间:2012-09-18 20:43:09

标签: mysql performance indexing

我希望能够一起加入很多桌子(9-10左右),但即使只有7个,它也会超时。我尽我所知尝试索引(参见附件EXPLAIN)。加入是不是为了处理7+表,还是我做错了什么?

(正如你在EXPLAIN中看到的那样,数据库中有很少的记录。即使我能让它工作,当有超过500,000条记录时会发生什么?

SELECT `Node`.`id`, `Node`.`name`, `Node`.`slug`, `Node`.`node_type_id`, `Node`.`site_id`, `Node`.`created`, `Node`.`modified`
FROM `mysite`.`nodes` AS `Node`
LEFT JOIN `mysite`.`data_date_times` AS `DataDateTime` ON (`DataDateTime`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_locations` AS `DataLocation` ON (`DataLocation`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_media` AS `DataMedia` ON (`DataMedia`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_metas` AS `DataMeta` ON (`DataMeta`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_profiles` AS `DataProfile` ON (`DataProfile`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_products` AS `DataProduct` ON (`DataProduct`.`node_id` = `Node`.`id`)
LEFT JOIN `mysite`.`data_texts` AS `DataText` ON (`DataText`.`node_id` = `Node`.`id`)
WHERE 1=1
GROUP BY `Node`.`id`

My EXPLAIN output

我正在使用JOINS,因为我希望能够通过它的连接表来排序主要结果,并能够查询每个包含中的特定字段(可能) - 我不知道一个好的方法用不同的查询做到这一点。

任何想法/建议非常欢迎。

更新

在数据库的本地副本上运行时,它表示“复制到临时表”需要117秒,然后完成并显示所有7条记录。

0 个答案:

没有答案