1.问题分析
智能刊登美客多慢sql ,执行了1000多秒,把数据库卡死了
2.解决方案:
Sku` IN 查询 参考智汇军规或DBA的方案优化一下
SELECT `Sku` FROM `P_Product` m WHERE (((((((((((((((((((((((((((NOT ( `IsDelete`=1 ) AND(IFNULL(CAST(`IsGroup` as SIGNED),0) <> 1 )) AND ( `Id` > 0 )) AND (( `CustomerId` = 1 ) AND ( `FinalJudgmentStatus` = 1 ))) AND (`Sku` IN ('15783228','15783247','15783094','15783109','15779242','15779314','15772368','15772395','15772409','15772428','15740052','15740478','15740479','15739879','15739894','15718368','15718386','15714869','15714926','15674662','15674865','15723081','15723172','15718658','15718755','15718089','15718117','15718131','15697919','15697981','15697193','15697272','15697273','15697274','15695619','15695719','15686678','15686798','15686799','15654411','15657161','15657179','15782558','15782570','15782584','15782593','15782604','15781792','15781799','15766110','15766222','15766249','15754181','15754293','15754301','15751311','15751437','15749914','15750018','15741378','15741423','15739257','15739362','15736452','15736507','15740605','15740743','15740748','15753303','15753460','15750988','15751006','15751008','15750562','15751030','15751063','15723409','15723455','15718617','15718678','15713348','15713411','15710615','15710827','15710256','15710303','15703374','15703439','15703256','15703358','15703054','15703270','15703271','15702949','15703014','15698223','15698262','15684506','15684560','15684569','15684575','15684583','15598536','15643268')) ) AND (NOT EXISTS ( SELECT * FROM `Ap_AutoPublish_Mercadolibre_AllSku` WHERE 1=1 AND ((((( `CustomerId` = `m`.`CustomerId` ) AND ( `StrategyId` = 77723 )) AND ( `MarketId` = 70 )) AND ( `OrderSourceId` = 10093 )) AND ( `Sku` = `m`.`Sku` )) ))) AND (`State` IN (0,1,4)) ) AND ( `StartBatch` >= 0 )) AND ( `StartBatch` <= 200 )) AND (`RiskInfringement` IN (1)) ) AND (`LogisticsAttribute` IN (1,27,12,14,21,268,383,382,390,391,398,402,403,404,416,439,469,386,384)) ) AND (`StrongPlug` IN (1,0)) ) AND (( CASE WHEN ( `StrongPlug` = 1 ) THEN `StrongPlugItem` ELSE 0 END ) IN (0,1,5)) ) AND ( `PackageLength` >= 1.00 )) AND ( `PackageLength` <= 60.00 )) AND ( `PackageWidth` >= 1.00 )) AND ( `PackageWidth` <= 60.00 )) AND ( `PackageHeight` >= 1.00 )) AND ( `PackageHeight` <= 60.00 )) AND ((( `PackageLength` + `PackageWidth` ) + `PackageHeight` ) <= 200.00 )) AND (( CASE WHEN ( `PackageWeight` = 0 ) THEN `GrossWeight` ELSE `PackageWeight` END ) >=( 0.10 * 1000 ))) AND (( CASE WHEN ( `PackageWeight` = 0 ) THEN `GrossWeight` ELSE `PackageWeight` END ) <=( 15.00 * 1000 ))) AND (( CASE WHEN ((( `PackageLength` * `PackageWidth` ) * `PackageHeight` ) = 0 ) THEN ((( `Length` * `Width` ) * `Height` ) / 5000 ) ELSE ((( `PackageLength` * `PackageWidth` ) * `PackageHeight` ) / 5000 ) END ) <= 2.00 )) AND ((( CASE WHEN ((( `PackageLength` * `PackageWidth` ) * `PackageHeight` ) = 0 ) THEN ((( `Length` * `Width` ) * `Height` ) / 5000 ) ELSE ((( `PackageLength` * `PackageWidth` ) * `PackageHeight` ) / 5000 ) END ) /( CASE WHEN ( `PackageWeight` = 0 ) THEN `GrossWeight` ELSE `PackageWeight` END )) <= 1.20 )) AND (NOT EXISTS ( SELECT * FROM `P_Market_Product_Review` WHERE (((( `CustomerId` = `m`.`CustomerId` ) AND ( `MarketId` = 70 )) AND ( `Sku` = `m`.`Sku` )) AND ( `IsForbidSale` = 1 )) ))) AND (NOT EXISTS ( SELECT * FROM `P_Product_ProhibitionSaleMarket` WHERE (((( `CustomerId` = `m`.`CustomerId` ) AND ( `MarketId` = 70 )) AND ( `Sku` = `m`.`Sku` )) AND ( `SiteCodes` IS NULL OR `SiteCodes`='')) ))) AND (EXISTS ( SELECT * FROM `P_Product_Inventory` WHERE 1=1 AND ( `DynamicInventory` >= 1 ) AND (( `CustomerId` = `m`.`CustomerId` ) AND ( `Sku` = `m`.`Sku` )) ))) AND (NOT EXISTS ( SELECT * FROM `Ap_AutoPublish_Mercadolibre_Queue` WHERE ((((( `CustomerId` = `m`.`CustomerId` ) AND ( `MarketId` = 70 )) AND ( `OrderSourceId` = 10093 )) AND ( `Sku` = `m`.`Sku` )) AND (`Status` IN ('normal','pending')) ) )))

优化方案:
最后一个 `Ap_AutoPublish_Mercadolibre_Queue` force index(idx_OrderSourceId_MarketId_Status_Sku_CustomerId),需要加强制索引