数据库:zhcxkj-center-product
查询时间:16.2004
扫描行数:48316.1
发送行数:998.818
指纹SQL: SELECT p . id , p . sku , p . productGroupSku , qlength , qwidth , qheight , p . isGroup FROM ( SELECT rp . id , rp . sku AS sku , rp . product_group_sku AS productGroupSku , rp . is_group as isGroup , CASE WHEN rp . pack_length > ? AND rp . pack_width > ? AND rp . pack_height > ? THEN rp . pack_length ELSE rp . length END AS qlength , CASE WHEN rp . pack_length > ? AND rp . pack_width > ? AND rp . pack_height > ? THEN rp . pack_width ELSE rp . width END AS qwidth , CASE WHEN rp . pack_length > ? AND rp . pack_width > ? AND rp . pack_height > ? THEN rp . pack_height ELSE rp . height END AS qheight , CASE WHEN rp . pack_weight > ? THEN rp . pack_weight ELSE rp . gross_weight END AS weight FROM ? rpa INNER JOIN rb_product rp ON rpa . customer_id = rp . customer_id AND rpa . sku = rp . sku AND rp . delete_status = ? AND rpa . check_status = ? WHERE rp . customer_id = ? AND rp . id > ? AND rpa . check_time >= ? AND rpa . check_time <= ? AND rp . product_state IN ( ? , ? , ? , ? , ? , ? ) AND rp . has_law_firm_agent IN ( ? , ? , ? ) AND rp . with_battery IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) ) p ORDER BY id asc LIMIT ? ;
真实SQL:SELECT p.id,p.sku,p.productGroupSku,qlength,qwidth,qheight,p.isGroup FROM ( SELECT rp.id, rp.sku AS sku, rp.product_group_sku AS productGroupSku,rp.is_group as isGroup, CASE WHEN rp.pack_length >0 AND rp.pack_width >0 AND rp.pack_height >0 THEN rp.pack_length ELSE rp.length END AS qlength, CASE WHEN rp.pack_length >0 AND rp.pack_width >0 AND rp.pack_height >0 THEN rp.pack_width ELSE rp.width END AS qwidth, CASE WHEN rp.pack_length >0 AND rp.pack_width >0 AND rp.pack_height >0 THEN rp.pack_height ELSE rp.height END AS qheight, CASE WHEN rp.pack_weight > 0 THEN rp.pack_weight ELSE rp.gross_weight END AS weight FROM rb_product_admin rpa INNER JOIN rb_product rp ON rpa.customer_id = rp.customer_id AND rpa.sku = rp.sku AND rp.delete_status=0 AND rpa.check_status = 1 WHERE rp.customer_id = 1 AND rp.id > 101576 AND rpa.check_time >= 1995-08-10 14:37:19.843 AND rpa.check_time <= 2025-08-10 14:37:19.843 AND rp.product_state IN ( 0 , 1 , 2 , 3 , 5 , 4 ) AND rp.has_law_firm_agent IN ( -1 , 0 , 1 ) AND rp.with_battery IN ( 6 , 7 , 8 , 11 , 15 , 26 , 30 , 41 , 46 , 384 , 392 , 393 , 394 , 395 , 396 , 397 , 400 , 401 , 429 , 448 , 471 , 474 , 477 , 480 , 481 ) ) p ORDER BY id asc LIMIT 1000;
无人工修改
AISQL修改建议:优化后的SQL语句:
SELECT rp.id,
rp.sku,
rp.product_group_sku AS productGroupSku,
CASE WHEN rp.pack_length > 0 AND rp.pack_width > 0 AND rp.pack_height > 0 THEN rp.pack_length ELSE rp.length END AS qlength,
CASE WHEN rp.pack_width > 0 AND rp.pack_length > 0 AND rp.pack_height > 0 THEN rp.pack_width ELSE rp.width END AS qwidth,
CASE WHEN rp.pack_height > 0 AND rp.pack_length > 0 AND rp.pack_width > 0 THEN rp.pack_height ELSE rp.height END AS qheight,
rp.is_group AS isGroup
FROM rb_product_admin rpa
INNER JOIN rb_product rp ON rpa.customer_id = rp.customer_id AND rpa.sku = rp.sku
WHERE rp.customer_id = 1
AND rp.id > 101576
AND rp.delete_status = 0
AND rpa.check_status = 1
AND rpa.check_time BETWEEN 1995-08-10 14:37:19.843 AND 2025-08-10 14:37:19.843
AND rp.product_state IN (0,1,2,3,4,5)
AND rp.has_law_firm_agent IN (-1,0,1)
AND rp.with_battery IN (6,7,8,11,15,26,30,41,46,384,392,393,394,395,396,397,400,401,429,448,471,474,477,480,481)
ORDER BY rp.id ASC
LIMIT 1000;
explain表:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | rp | None | range | PRIMARY,uidx_rb_product,idx_deletestatus_updatetime,idx_withbattery_productstate,idx_has_law_firm_agent,idx_product_customer_id | PRIMARY | 8 | None | 2177566 | 0.28 | Using where |
| 1 | SIMPLE | rpa | None | ref | uxid_rb_product_admin,idx_check_status,idx_customer_id_sku_check_time,idx_check_time_check_status_sku_customer_id,idx_product_admin_customer_id,idx_check_status_sku_customer_id | uxid_rb_product_admin | 402 | zhcxkj-center-product.rp.sku | 1 | 12.5 | Using index condition; Using where |
额外建议:
索引建议:
取出表 【rb_product】 where条件字段 【customer_id】 100000 条记录,重复的数据有:【95110】 条,没有必要为该字段创建索引。
取出表 【rb_product】 where条件字段 【product_state】 100000 条记录,重复的数据有:【94500】 条,没有必要为该字段创建索引。
取出表 【rb_product】 where条件字段 【has_law_firm_agent】 100000 条记录,重复的数据有:【95097】 条,没有必要为该字段创建索引。
取出表 【rb_product】 where条件字段 【with_battery】 100000 条记录,重复的数据有:【94451】 条,没有必要为该字段创建索引。
→ 【rb_product】表 【id】字段,索引已经存在,无需添加任何索引。
【rb_product】表 【id】字段,索引分析:
+--------------+--------------------------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+==============+================================+===============+===============+
| rb_product | idx_product_customer_id | id | 4355132 |
+--------------+--------------------------------+---------------+---------------+
| rb_product | idx_property_state_agent_delet | id | 4355132 |
| | e | | |
+--------------+--------------------------------+---------------+---------------+
| rb_product | PRIMARY | id | 4355113 |
+--------------+--------------------------------+---------------+---------------+
取出表 【rb_product_admin】 where条件字段 【check_time】 100000 条记录,重复的数据有:【100000】 条,没有必要为该字段创建索引。
→ 【rb_product_admin】 表,无需添加任何索引。