insert select MySQL与直接select 耗时有差异

Viewed 61

如题 单跑下面的 select 语句只需要几十毫秒,但是select insert 确要几秒,实际上insert的数据并不多只有几十条

INSERT INTO mysql_db.shuju.a_metrics (etl_time,dimension,metrics_name,value) 
SELECT
	DATE_FORMAT(DATE_SUB('2024-12-12 11:00:00', INTERVAL 1 hour), '%Y%m%d%H%i%s') AS etl_time,
	orderInfo.start_city AS dimension,
	'金额' AS metrics_name,
	SUM(IFNULL(a.estimate_basic_amount, 0)) AS value
FROM
	db_a.order_info_a a
LEFT JOIN db_a.order_info_b b ON
	a.order_id = b.order_id
LEFT JOIN db_a.dim_order d ON
	a.source = d.source
WHERE
	a.product_type_id = 1
	AND a.time_dispatch_done >= UNIX_TIMESTAMP(DATE_SUB('2024-12-12 11:00:00', INTERVAL 1 hour))
	AND a.time_dispatch_done < UNIX_TIMESTAMP('2024-12-12 11:00:00')
	AND a.create_time >= CAST(DATE_SUB('2024-12-12 11:00:00', INTERVAL 1 day) AS DATETIME)
	AND b.create_time >= CAST(DATE_SUB('2024-12-12 11:00:00', INTERVAL 1 day) AS DATETIME)
	AND d.source_belong = 'xx渠道'
GROUP BY
	a.start_city

f99fb9e2-af26-4ecf-be88-8135eb99d139.jpeg
上图是selectinsert 扫描行数,与 a b 表总行数一致,

f52d28fc-95d3-4846-8089-a308ba474fc5.jpeg
上图是单select 的扫描行数,与过滤后的行数一致,感觉没有把过滤数据进行下推

2 Answers

理论上导入确实是要比查询更费时间的,另外这个导入还没有使用新优化器,你可以把新优化器关了,看看查询和导入的时间差别

单insert select的时候用的 old planner
e2783111-d97f-4571-955e-93188dea6717.jpeg

select 的时候用的nereids planner
acfb6c4c-132b-4adc-9847-d1afdfda8fe0.jpeg