问题一:PolarDB产品使用问题之sql运行报错是神么原因
PolarDB有一个SQL.语句。 没有group by 的时候很快 0.4S。有group by 就很慢很慢 60S。我调整 tmp_table_size 参数,几乎没有作用。 请问还有什么优化方案吗?explain
select a.,d. ,b.advanceid,b1.BUF10,b2.qty,b3.BUF10,c.attrpricetrace,bu.b2b_isputon,mu.b2b_isputon,bg.billdetailid,bs.Flag
from erp_bill_index a force index(idx_for_sale_analysis)
#
datascope_join_d
inner join erp_goods_Stock_inout_deal d force index(idx_for_sale_analysis)
ON d.profileid
= a.profileid
AND d.billid
= a.billid
LEFT JOIN erp_bill_sale b force index(idx_for_sale_analysis) ON-- b.billid = a.billid AND a.profileid
= b.profileid
and
b.billid = a.billid and d.billdetailid
= b.billdetailid
-- and b.billtype in (601,607)
LEFT JOIN erp_bill_sale_exchange b1 ON b1.billid = a.billid AND a.profileid
= b1.profileid
and d.billdetailid
= b1.billdetailid
LEFT JOIN erp_bill_real_inout b2 ON b2.frombillid = a.billid AND a.profileid
= b2.profileid
AND b2.frombilldetailid=d.billdetailid AND a.billtype=611
LEFT JOIN erp_bill_sale_return b3 ON b3.billid = a.billid AND a.profileid
= b3.profileid
and d.billdetailid
= b3.billdetailid
LEFT JOIN erp_bill_detail_goods_attribute
c ON c.billdetailid
= d.billdetailid
AND c.billid = d.billid
AND c.profileid
= d.profileid
left join erp_bill_index_ext e force index(idx_for_sale_analysis)
on e.billid=a.billid and e.profileid=a.profileid
LEFT JOIN bas_goods_unit bu ON d.gid
=bu.gid
AND d.profileid
=bu.profileid AND bu.uid=d.muid
left join bas_goods_unit mu on mu.gid=d.gid and mu.profileid=b.profileid and mu.usetype&1>0
LEFT JOIN erp_contract_bill_goodscash bg ON bg.billid=d.billid AND bg.billdetailid=d.billdetailid AND bg.profileid=d.profileid
left join bas_store bs on d.sid = bs.sid
#
shownode inner join bas_goods g on g.profileid=d.profileid and g.gid=d.gid
#
dealer left join bas_dealer bd on bd.did=a.did and bd.profileid=a.profileid
LEFT JOIN bas_goods_unit big ON d.gid
=big.gid
AND d.profileid
=big.profileid AND big.sort
=3 and big.Flag = 0
LEFT JOIN bas_goods_unit middle ON d.gid=middle.gid
AND d.profileid
=middle.profileid
AND middle.sort
=2 and middle.flag = 0
left join bas_clerk bc on bc.cid=a.cid and bc.profileid=a.profileid
#
showbranch left join bas_branch br on br.profileid=a.profileid and br.bid=a.bid
where a.billtype in(601,607,603,715,602) AND a.status
>=20 and a.ifred = 0 and a.profileid = 200015950
AND ( TRUE or bc.cid=638839)
#
ginfo
and true and a.billdate>='2023-01-01' and a.billdate<'2024-01-09'
这个是没有group by 的, show profile 查看。耗时都在sending_data
参考回答:
而不加GROUP BY检索到500条数据就结束了,两个肯本不在一个量级上,你先包一层先LIMIT在去group by那也很快就会结束了,如果您希望提高group by..limit...的性能,可以尝试在group by的表上建立对应索引。这样可以使用流式计算,有limit的时候可以提前结束。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/598260
问题二:PolarDB有一个表加了索引但是查询没有使用吗 ?
PolarDB有一个表加了索引但是查询没有使用吗 ?
参考回答:
楼主你好,据我所知在阿里云PolarDB中,有时候会遇到一个表加了索引但查询没有使用的情况,这可能是由于统计信息不准确,PolarDB使用统计信息来做查询优化,如果统计信息不准确或者过期,就可能导致查询计划选择不正确的索引,你可以通过手动收集统计信息或者使用自动收集统计信息功能来解决这个问题。
还有就是查询条件不准确,如果查询条件不准确或者无法满足索引的选择度,就可能导致查询优化器选择全表扫描而不是使用索引,你可以通过优化查询条件来改善查询性能。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/597584
问题三:PolarDB今天这个实例。有一个语句。我回放很快,慢日志看到很慢,造成CPU上升到100%?
"PolarDB今天这个实例。有一个语句。我回放很快,慢日志看到很慢,造成CPU上升到100%,如何解决?
"
参考回答:
我看您实例是56 的,还没有这个参数
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/597582
问题四:PolarDB还有这个也是没有走索引的 麻烦也帮忙看下?
PolarDB还有这个也是没有走索引的 麻烦大佬也帮忙看下?
create_time 是有索引的
参考回答:
表可以创建很多索引,优化器在选择的索引的时候,是根据代价选择的, 走哪个索引代价低,就会选择哪个索引,并不是创建出来的索引在一条查询里都要用上,当前query选择idx_sender_id索引代价更低, 查询更快, 实际数据也是sender_id= 1724591条件过滤性更好, 所以计划没有问题;
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/597575
问题五:PolarDB这个sql运行报错了,帮忙看看?
PolarDB这个sql运行报错了?
参考回答:
两句中间少个分号,set前加个分号吧,基于cost选择的"index": "idx_depletion_type"基于当前query,这两个索引idx_depletion_type, idx_create_time需要扫描的数据量如下优化器选择的索引没有问题的;不过两个索引的代价相差不是很大, 如果变动时间范围,对应数据量不一样,代价不一样,也可能会选择另外一个索引?
关于本问题的更多回答可点击原文查看: