Mysql 查询效率-计数
我试图让查询运行得更高效,并返回有效的结果。当我在特定列上包含COUNT函数时,我当前的查询需要10分钟以上才能完成。我还注意到,在进行计数时,所有结果都返回为NULL 当我自己运行COUNT部分时,只需不到一秒钟的时间就可以完成,并得到正确的结果 以下是我正在使用的查询: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
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;