数据库:zhcxkj-center-warehouse
查询时间:22.222
扫描行数:399.682
发送行数:185.545
指纹SQL: select DISTINCT tb . id from ( SELECT tafsi . id , rfs . shipment_id , rfs . seller_sku , rfs . order_source_id , min ( rfs . is_over ) AS is_over FROM ? tafsi JOIN rb_fba_shipmentdetail rfs ON rfs . shipment_id = tafsi . shipment_id AND rfs . seller_sku = tafsi . msku AND rfs . order_source_id = tafsi . source_id where tafsi . is_completed = ? and tafsi . is_deleted = ? GROUP BY tafsi . id , rfs . shipment_id , rfs . seller_sku , rfs . order_source_id ) tb where tb . is_over = ? ORDER BY tb . id LIMIT ? ;
真实SQL:select DISTINCT tb.id from ( SELECT tafsi.id, rfs.shipment_id, rfs.seller_sku, rfs.order_source_id, min( rfs.is_over ) AS is_over FROM t_amz_fba_shipment_item tafsi JOIN rb_fba_shipmentdetail rfs ON rfs.shipment_id = tafsi.shipment_id AND rfs.seller_sku = tafsi.msku AND rfs.order_source_id = tafsi.source_id where tafsi.is_completed=0 and tafsi.is_deleted = 0 GROUP BY tafsi.id, rfs.shipment_id, rfs.seller_sku, rfs.order_source_id ) tb where tb.is_over=1 ORDER BY tb.id LIMIT 1000;
无人工修改
AISQL修改建议:我帮您优化这个SQL查询,以下是优化后的版本:
SELECT DISTINCT tafsi.id
FROM t_amz_fba_shipment_item tafsi
JOIN (
SELECT shipment_id, seller_sku, order_source_id, MIN(is_over) AS is_over
FROM rb_fba_shipmentdetail
GROUP BY shipment_id, seller_sku, order_source_id
HAVING MIN(is_over) = 1
) rfs ON rfs.shipment_id = tafsi.shipment_id
AND rfs.seller_sku = tafsi.msku
AND rfs.order_source_id = tafsi.source_id
WHERE tafsi.is_completed = 0
AND tafsi.is_deleted = 0
ORDER BY tafsi.id
LIMIT 1000;
这个优化方案做了以下改进:
1. 将子查询中的过滤条件 is_over=1 提前到子查询内部,减少中间结果集
2. 简化了GROUP BY子句,去掉了不必要的字段
3. 直接在主查询中使用DISTINCT而不是在子查询结果上使用
4. 保持了相同的业务逻辑但减少了数据处理的量级
explain表:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | PRIMARY | <derived2> | None | ALL | None | None | None | None | 192096 | 100 | Using temporary; Using filesort |
| 2 | DERIVED | tafsi | None | ref | idx_shipment_id,idx_souce_id,idx_msku,idx_is_completed,idx_shipment_id_msku_source_id,idx_source_id_deliverying_time | idx_is_completed | 2 | const | 1661362 | 10 | Using where; Using temporary |
| 2 | DERIVED | rfs | None | ref | idx_shipment_id,idx_shipment_id_seller_sku_order_source_id | idx_shipment_id_seller_sku_order_source_id | 410 | zhcxkj-center-warehouse.tafsi.shipment_id,zhcxkj-center-warehouse.tafsi.msku,zhcxkj-center-warehouse.tafsi.source_id | 1 | 100 | Using index condition |
额外建议:
索引建议:
取出表 【t_amz_fba_shipment_item】 where条件字段 【is_completed】 100000 条记录,重复的数据有:【100000】 条,没有必要为该字段创建索引。
取出表 【t_amz_fba_shipment_item】 where条件字段 【is_deleted】 100000 条记录,重复的数据有:【99999】 条,没有必要为该字段创建索引。
→ 【t_amz_fba_shipment_item】表 【id】字段,索引已经存在,无需添加任何索引。
【t_amz_fba_shipment_item】表 【id】字段,索引分析:
+-------------------------+--------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+=========================+==============+===============+===============+
| t_amz_fba_shipment_item | PRIMARY | id | 4798309 |
+-------------------------+--------------+---------------+---------------+
取出表 【rb_fba_shipmentdetail】 where条件字段 【is_over】 100000 条记录,重复的数据有:【99975】 条,没有必要为该字段创建索引。
→ 【rb_fba_shipmentdetail】表 【shipment_id,seller_sku,order_source_id】字段,联合索引已经存在,无需添加任何索引。
【rb_fba_shipmentdetail】表 【shipment_id,seller_sku,order_source_id】字段,索引分析:
+-----------------------+--------------------------------+-----------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+=======================+================================+=================+===============+
| rb_fba_shipmentdetail | idx_shipment_id | shipment_id | 1119473 |
+-----------------------+--------------------------------+-----------------+---------------+
| rb_fba_shipmentdetail | idx_shipment_id_seller_sku_ord | order_source_id | 6788002 |
| | er_source_id | | |
+-----------------------+--------------------------------+-----------------+---------------+
| rb_fba_shipmentdetail | idx_shipment_id_seller_sku_ord | shipment_id | 1189995 |
| | er_source_id | | |
+-----------------------+--------------------------------+-----------------+---------------+
| rb_fba_shipmentdetail | idx_shipment_id_seller_sku_ord | seller_sku | 7322662 |
| | er_source_id | | |
+-----------------------+--------------------------------+-----------------+---------------+