mysql - 耗时较长的mysql查询需要优化
问题描述
这是我的查询和销售表,几乎有 18485388 条记录,而 evs_MAX_3 只有 29 条记录,但根据我的查询,需要搜索所有记录以找出匹配的记录。但是这种方法花费了太多时间,任何人都可以建议我更好的方法。
create table tmp_e1 as select sale_record_id,
transaction_id,
date(sale_date_time) as date,
sale_amount,
float_account_id,
(float_account_balance_after) as close_Balance,
sale_status_id,'max3' as type from dailyreports.evs_sale
where sale_record_id in (select
sale_id
from dailyreports.tmp_evs_MAX_3
group by date)
解决方案
(缓慢的部分是SELECT
;我已将其从 中提取出来CREATE TABLE
以专注于它。)
IN ( SELECT ... )
通常是一个缓慢的构造。查询可以重写为
select sale_record_id,
transaction_id,
DATE(sale_date_time) as date,
sale_amount,
float_account_id,
float_account_balance_after as close_Balance,
sale_status_id,
'max3' as type
FROM ( SELECT sale_id
FROM dailyreports.tmp_evs_MAX_3
GROUP BY date
) AS t
JOIN dailyreports.evs_sale ON sale_record_id = t.sale_id
这些可能会有所帮助:
tmp_evs_MAX_3: INDEX(sale_id, date)
evs_sale: INDEX(sale_record_id)
请注意FROM
将如何仅获得 29 行,然后JOIN
将只需要查找 29(?) 行。并且有索引可以帮助每个步骤。
(如果您提供原始公式的SHOW CREATE TABLE
and EXPLAIN
,我们可以指出它为什么这么慢。)