我正在执行这个查询--结果会很好,但问题是它花费的时间太长了,有人能告诉我如何提高这个查询的效率(SQL显示这个查询需要2.8秒,但实际上需要超过10秒)--一开始我在3个表上使用join,但是这个查询比这个表要花更多的时间。提前谢谢。
SELECT
ee_expert.expert_id ,
AVG( ee_expert_rating.rating_stars ) AS total_rating,
ee_expert.expert_id,
COUNT( DISTINCT ee_expert_rating.rating_id ) AS rating_count
FROM
ee_expert_rating
RIGHT JOIN ee_expert
ON ee_expert.expert_id = ee_expert_rating.expert_id
WHERE
expert_verified_email =2
AND expert_brief_description != ''
AND expert_account_status =1
AND ee_expert.expert_id IN
(
SELECT
expert_id
FROM
ee_expert_categories
WHERE
ee_expert_categories.category_id =5
GROUP BY
expert_id
)
GROUP BY
ee_expert.expert_id
ORDER BY
rating_count DESC 发布于 2013-10-01 11:22:02
这应该会更快一些:(删除内联组by,在本例中使用removed可以有所帮助)。
SELECT
ee_expert.expert_id ,
AVG( ee_expert_rating.rating_stars ) AS total_rating,
COUNT( DISTINCT ee_expert_rating.rating_id ) AS rating_count
FROM
ee_expert_rating RIGHT JOIN
ee_expert ON ee_expert.expert_id = ee_expert_rating.expert_id
WHERE
expert_verified_email =2 AND
expert_brief_description != '' AND
expert_account_status =1 AND
exists(
SELECT
expert_id
FROM
ee_expert_categories
WHERE
ee_expert_categories.category_id =5 and
ee_expert_categories.expert_id=ee_expert.expert_id
)
GROUP BY
ee_expert.expert_id
ORDER BY
rating_count DESC(尝试保持IN也/不带内部组by。)
发布于 2013-10-01 11:23:06
两件事拖慢了整件事:
IN()中使用子subselect总是很慢的(我认为是因为它对每个父数据集都是递归运行的)。一个选项是使用EXISTS()https://stackoverflow.com/questions/19114748
复制相似问题