Mysql 查询效率-计数

Mysql 查询效率-计数,mysql,performance,count,Mysql,Performance,Count,我试图让查询运行得更高效,并返回有效的结果。当我在特定列上包含COUNT函数时,我当前的查询需要10分钟以上才能完成。我还注意到,在进行计数时,所有结果都返回为NULL 当我自己运行COUNT部分时,只需不到一秒钟的时间就可以完成,并得到正确的结果 以下是我正在使用的查询: SELECT x.entityCode 'Entity Code' , (SELECT MAX(visit_date) AS secMaxDate FROM z_dev.entities_visited

我试图让查询运行得更高效,并返回有效的结果。当我在特定列上包含COUNT函数时,我当前的查询需要10分钟以上才能完成。我还注意到,在进行计数时,所有结果都返回为NULL

当我自己运行COUNT部分时,只需不到一秒钟的时间就可以完成,并得到正确的结果

以下是我正在使用的查询:

 SELECT 
    x.entityCode 'Entity Code'
,   (SELECT MAX(visit_date) AS secMaxDate FROM z_dev.entities_visited 
            WHERE entity_code = x.entityCode AND visit_date < x.maxDate) ' Previous Visit Date'
,   x.maxDate   'Latest Visit Date'
,   cycle_end_date 'Cycle End Date'
,   total_visits 'Total Visits (28 Days)'
FROM 
    (SELECT 
        entity_code AS storeCode
    ,   MAX(visit_date) AS maxDate
    ,   MAX(cycle_end_date) AS cycle_end_date
    ,   (SELECT COUNT(visit_date) FROM z_dev.entities_visited A
            WHERE visit_date BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 28 DAY)) AND DATE(DATE_SUB(CURDATE(), INTERVAL 0 DAY) AND A.entity_code = B.entity_code)
            GROUP BY entity_code) AS 'total_visits'
    FROM 
        z_dev.entities_visited B GROUP BY entity_code) AS X;
总访问量的计算是我昨天在查询解决方案中添加的一部分。基本上,我希望看到以下三件事:

最近一次访问实体的日期是什么时候 x、 maxDate 在最近一次访问之前,该实体最后一次访问是什么时候 “上次访问日期”当前进行的访问 该实体在过去28天内访问了多少次 当前问题/成果

查询时间慢10分钟+ 计数为子查询返回所有空值 对自己运行的计数查询在几秒钟内返回预期结果 主查询在几秒钟内返回预期结果
谢谢,我想我是想得太多了,这就是为什么我没有得到想要的结果

现在,我的查询按预期运行

SELECT 
    x.entityCode 'Entity Code'
,   (SELECT MAX(visit_date) AS secMaxDate FROM z_dev.entities_visited 
            WHERE entity_code = x.entityCode AND visit_date < x.maxDate) ' Previous Visit Date'
,   x.maxDate   'Latest Visit Date'
,   cycle_end_date 'Cycle End Date'
,   visits 'Total Visits (28 Days)'
FROM 
    (SELECT 
        entity_code AS entityCode
    ,   MAX(visit_date) AS maxDate
    ,   MAX(cycle_end_date) AS cycle_end_date
    ,   (SELECT COUNT(visit_date) AS visits WHERE visit_date BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 28 DAY)) AND DATE(DATE_SUB(CURDATE(), INTERVAL 0 DAY))) AS visits
    FROM 
        z_dev.entities_visited B GROUP BY entity_code) AS X
GROUP BY
    x.entityCode;

如果你能让我们知道你想计算什么,那会很有帮助的。您当前的查询看起来效率低下且混乱。也许我们可以给你一个性能更好的替代方案。Gut reaction说,为了确保你有一个索引实体代码,请访问实体上的日期描述,但对于所有性能问题,你能发布你当前的索引和查询解释的结果吗?谢谢各位,我添加了一些额外的信息
SELECT 
    x.entityCode 'Entity Code'
,   (SELECT MAX(visit_date) AS secMaxDate FROM z_dev.entities_visited 
            WHERE entity_code = x.entityCode AND visit_date < x.maxDate) ' Previous Visit Date'
,   x.maxDate   'Latest Visit Date'
,   cycle_end_date 'Cycle End Date'
,   visits 'Total Visits (28 Days)'
FROM 
    (SELECT 
        entity_code AS entityCode
    ,   MAX(visit_date) AS maxDate
    ,   MAX(cycle_end_date) AS cycle_end_date
    ,   (SELECT COUNT(visit_date) AS visits WHERE visit_date BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 28 DAY)) AND DATE(DATE_SUB(CURDATE(), INTERVAL 0 DAY))) AS visits
    FROM 
        z_dev.entities_visited B GROUP BY entity_code) AS X
GROUP BY
    x.entityCode;