【发布时间】:2011-01-26 17:02:53
【问题描述】:
我在 MySQL 中使用派生表时遇到问题。使用派生表是否会固有地减慢查询的处理速度?
这是我要运行的查询。它不会执行,只是超时。
确实成功了。真的,我已将问题隔离到最后一次加入。当我取出最后一个加入时,它工作正常。但是当我添加最后一个连接时,它拒绝执行。
SELECT cr.COMMUNICATIONS_ID AS ANSWER_ID,
cr.CONSUMER_ID as VIEWER_ID,
cr.ACTION_LOG_ID,
nc.PARENT_COMMUNICATIONS_ID AS QUESTION_ID,
nc.SENDER_CONSUMER_ID AS REPLIER_ID,
ces.EXPERT_SCORE AS REPLIER_EXPERTISE,
cim.CONSUMER_INTEREST_EXPERT_ID AS DOMAIN
FROM (SELECT 234 AS CONSUMER_ID,
ACTION_LOG_ID,
COMMUNICATIONS_ID
FROM consumer_action_log
WHERE COMM_TYPE_ID=4) AS cr
JOIN network_communications AS nc ON
cr.COMMUNICATIONS_ID=nc.COMMUNICATIONS_ID
JOIN communication_interest_mapping AS cim ON
nc.PARENT_COMMUNICATIONS_ID=cim.COMMUNICATION_ID
JOIN consumer_expert_score AS ces ON
nc.SENDER_CONSUMER_ID=ces.CONSUMER_ID
AND cim.CONSUMER_INTEREST_EXPERT_ID=ces.CONSUMER_EXPERT_ID;
【问题讨论】:
-
当您单独运行该子查询时会发生什么?它成功了吗?我会单独对子查询进行解释,然后再对整个查询进行解释。
-
确实成功了。真的,我已将问题隔离到最后一次加入。当我取出最后一个加入时,它工作正常。但是当我添加最后一个连接时,它拒绝执行。
-
对该查询的 EXPLAIN 的结果是什么?您在每个表中的 consumer_id/expert_id 上都有索引吗?我会推荐一个涵盖每个表中两列的索引。
-
另外,为了优化帮助,您应该发布每个涉及的表的 SHOW CREATE TABLE 查询的结果(除了 EXPLAIN 的结果)。
-
我是 SQL 和编程新手。你如何利用索引。还是它们被自动利用了。
标签: sql mysql derived-table