首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql查询需要时间,因为我正在查看三个表

sql查询需要时间,因为我正在查看三个表
EN

Stack Overflow用户
提问于 2013-10-01 11:15:09
回答 2查看 78关注 0票数 0

我正在执行这个查询--结果会很好,但问题是它花费的时间太长了,有人能告诉我如何提高这个查询的效率(SQL显示这个查询需要2.8秒,但实际上需要超过10秒)--一开始我在3个表上使用join,但是这个查询比这个表要花更多的时间。提前谢谢。

代码语言:javascript
运行
复制
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 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 11:22:02

这应该会更快一些:(删除内联组by,在本例中使用removed可以有所帮助)。

代码语言:javascript
运行
复制
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。)

票数 1
EN

Stack Overflow用户

发布于 2013-10-01 11:23:06

两件事拖慢了整件事:

  1. 它需要10秒,因为通过网络传输数据,并以HTML (phpMyAdmin?)显示,它比实际语句要慢。这只是猜测,但在98%的情况下是正确的。
  2. IN()中使用子subselect总是很慢的(我认为是因为它对每个父数据集都是递归运行的)。一个选项是使用EXISTS()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19114748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档