gpt4 book ai didi

mysql - 如何优化以下查询

转载 作者:可可西里 更新时间:2023-11-01 07:37:42 25 4
gpt4 key购买 nike

SELECT
t1.theater_id,
sum(t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets) as Gross,
sum(t2.full_cost_price * t1.full_tickets +
t2.half_cost_price * t1.half_tickets) as Cost,
Round(sum((t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets) * t3.rate) / 100,
2) as IPG,
(sum(t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets)
- Round(sum((t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets) * (CASE
WHEN ISNULL(t3.rate) THEN 0
ELSE t3.rate
END)) / 100,
2)) as NetRev,
CASE
WHEN (t1.method = '2') THEN sum(0.00)
ELSE 0
END as sms,
sum((CASE
WHEN (t4.type = '1') THEN ((t1.full_tickets * 2) + (t1.half_tickets))
ELSE (t1.full_tickets + t1.half_tickets)
END) * 4.00) as maintenance,
sum((((t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets)
- (Round((t2.full_sale_price * t1.full_tickets +
t2.half_sale_price * t1.half_tickets) * (CASE
WHEN ISNULL(t3.rate) THEN 0
ELSE t3.rate
END) / 100,
2))) - (t2.full_cost_price * t1.full_tickets +
t2.half_cost_price * t1.half_tickets))
- (CASE
WHEN (t1.method = '2') THEN 0.00
ELSE 0
END)
- (CASE
WHEN (t4.type = '1') THEN ((t1.full_tickets * 2) +
(t1.half_tickets))
ELSE (t1.full_tickets + t1.half_tickets)
END) * 4.00) as admincost,
sum(CASE
WHEN (t4.type = '1') THEN ((t1.full_tickets * 2) + (t1.half_tickets))
ELSE (t1.full_tickets + t1.half_tickets)
END) as totTk
FROM
`ratecard_rates` as t2 INNER JOIN
`reservation` as t1 ON t1.movie_id = t2.movie_id
AND t1.theater_id = t2.theater_id
AND t1.showtime_id = t2.showtime_id
AND t1.category_id = t2.category_id
AND t1.bx_date = t2.date_apply
LEFT JOIN
`paymentgateway` as t3 ON t1.paymentgateway_id = t3.id
LEFT JOIN
`theatercategories` as t4 ON t1.category_id = t4.id
WHERE
t1.status = '1' AND t1.method = '1'
AND t1.reservation_type = '1'
AND DATE(`tx_date`) BETWEEN DATE('2012-08-27') AND DATE('2012-08-27')
GROUP BY t1.theater_id

这里是解释 EXPLAIN

最佳答案

"Using temporary; using filesort" 通常意味着在查询计划的这一点上,MySsql 决定将临时集写入磁盘,不幸的是,这意味着它并不总是能够使用索引您可能已将其放在相关列中。

根据我的经验,解决此问题的唯一方法是尝试减少中间结果的集合大小。尝试隔离发生这种情况的点:例如:将整个 SELECT 替换为 COUNT(*) 以消除 CASE 位等,看看是什么产生了MySql 想要在磁盘上“缓存”的 2779 行。

this answer了解更多信息。

关于mysql - 如何优化以下查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com