lea*_*_rj 2 mysql sql database rdbms
我正在使用MySQL DB.我有两张桌子 -
我在一个服务调用中运行此查询以获取多个产品.有没有办法优化它以实现快速执行.
select
link1.ProductDataLinkUrl as ProductDataUrl1,
link2.ProductDataLinkUrl as ProductDataUrl2,
link3.ProductDataLinkUrl as ProductDataUrl3 ,
link4.ProductDataLinkUrl as ProductDataUrl4
FROM
product_data pd
left join
product_data_links link1
on link1.ProductDataId = pd.ProductDataId
and link1.ProductDataLinkTypeId = 1
and link1.ProductDataLinkIsActive = 1
left join
product_data_links link2
on link2.ProductDataId = pd.ProductDataId
and link2.ProductDataLinkTypeId = 2
and link2.ProductDataLinkIsActive = 1
left join
product_data_links link3
on link3.ProductDataId = pd.ProductDataId
and link3.ProductDataLinkTypeId = 3
and link3.ProductDataLinkIsActive = 1
left join
product_data_links link4
on link4.ProductDataId = pd.ProductDataId
and link4.ProductDataLinkTypeId = 4
and link4.ProductDataLinkIsActive = 1
WHERE
pd.ProductDataId = 99999
Run Code Online (Sandbox Code Playgroud)
使用以下索引您的查询应该没问题:
product_data(ProductDataId)product_data_links(ProductDataId, ProductDataLinkTypeId, ProductDataLinkIsActive)在某些情况下,使用起来会更快group by:
select max(case when ProductDataLinkTypeId = 1 then ProductDataLinkUrl end) as ProductDataUrl1,
max(case when ProductDataLinkTypeId = 2 then ProductDataLinkUrl end) as ProductDataUrl2,
max(case when ProductDataLinkTypeId = 3 then ProductDataLinkUrl end) as ProductDataUrl3,
max(case when ProductDataLinkTypeId = 4 then ProductDataLinkUrl end) as ProductDataUrl4
from product_data_links pdl
where ProductDataId = 99999 and
ProductDataLinkIsActive = 1 and
ProductDataLinkTypeId in (1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)
您希望此查询的上面的第二个索引.