开发者社区 > 数据库 > 关系型数据库 > 正文

在PolarDB我加这个好像没起效果?

在PolarDB我加这个好像没起效果?现在查询2 秒,想1 秒以内达不到。325fb0bd423c680bd1b40972b13397a0.png
SELECT t1.sell_record_id id,t1.sell_record_id,t1.sell_record_code,t1.deal_code_list,t1.sale_channel_code,t1.store_code,t1.shop_code,t1.express_code,t1.delivery_time,t1.plan_send_time,t1.record_time,t1.pay_time,t1.buyer_name,t1.express_no,t1.express_money,t1.payable_money,t1.paid_money,t1.fx_express_money,t1.fx_payable_money,t1.goods_weigh,t1.goods_num,t1.pay_type,t1.is_back,t1.pay_status,t1.order_status,t1.shipping_status,t1.must_occupy_inv,t1.lock_inv_status,t1.is_pending,t1.is_problem,t1.is_combine_new,t1.is_split_new,t1.is_change_record,t1.is_handwork,t1.is_copy,t1.sale_mode,t1.is_fenxiao,t1.is_rush,t1.is_replenish,t1.order_remark,t1.store_remark,t1.buyer_remark,t1.seller_remark,t1.seller_flag,t1.order_type,t1.is_hx,t1.cn_date,t1.return_status,t1.receiver_name,t1.receiver_phone,t1.receiver_mobile,t1.receiver_address,t1.is_bj,t1.bj_je,t1.invoice_status,main.transport_mode,main.virtual_store_code FROM oms_sell_record t1 LEFT JOIN oms_sell_record_main main ON t1.sell_record_code=main.record_code WHERE t1.shop_code IN('tb002','12697403','13961149','14632902','10688625','10805738','10688722','11665749','13706526','14034891','10783567','14765793','12597064','14398503','13552442','13074907','12854030','12697486','12707476','13552464','13236068','13400475','14594666','14590426','14993880','14994782','15016784','jd034','ht036','ht037','15035749','15070232') AND (t1.store_code IN ('WXCK001','WXCK002','WXCK003','WXCK004','WXCK005','WXCK006','WXCK007','WXCK008','SZCK001','JSJCK001','JSJCK002','JSJCK003','JSJCK004','JSJCK005','JSJCK006','JSJCK007','WXCK001-70','SZCK001-20','CGTEST') OR t1.store_code='' OR t1.store_code is NULL) AND t1.is_problem = 1 AND t1.order_status = 0 ORDER BY t1.record_time DESC,t1.sell_record_id DESC LIMIT 0,2000

展开
收起
三分钟热度的鱼 2024-03-27 19:29:46 24 0
2 条回答
写回答
取消 提交回答
  • 根据您提供的查询语句,我注意到您T N 和 IN 子句。这些操作可能会导查询性能下降。以下是一些建议来优:

    1. 减少 JOIN 的数量:尽量避免使用过多的 JOIN 操作,因为它们会增加查询的复杂性和执行时间。如果可能的话,尝试将多个表合并为一个表,或者使用子查询来减少 JOIN 的数量。

    2. 使用索引:确保在查询中涉及的列上创建了适当的索引。这将帮助数据库更快地查找和过滤数据。例如,您可以在 t1.shop_code、1.store_code 和 t1.is_proble列上创建索引。

    3. 限制结果集的大小:使用 LIMIT子句来限制返回的结果数量。这可以减少数据传输和处理的时间。在您的查询中,您已经使用了 LIMIT 0,2000,这意味着只返回前 2000 条记录。这是一个合理的选择,但如果您需要更多的结果,可以考虑分页查询。

    4. 优化排序:根据您的查询,您正在按照 t1.record_time 和 t1.sell_record_id 进行排序。确保这两个列都有索引,以加快排序过程。

    5. 分析查询计划:使用数据库提供的工具(如 EXPLAIN 或 EXPLAIN ANALYZE)来分析查询计划,并找出潜在的性能瓶颈。根据分析结果,可以进一步优查询。

    请注意,这些建议可能需要根据您的具体数据模型和查询需求进行调整。在进行任何更改之前,请务必备份数据并在测试环境中验证更改的影响。

    2024-03-31 09:48:18
    赞同 展开评论 打赏
  • 024b65dd72b956d00b82396c9672a0f6.png
    这个走行存的话,默认并行是会在1s内的 ,你可以通过设置 set use_imci_engine = on/off 来看看列存/行存的执行效率,CALL dbms_outln.add_optimizer_outline('', '', 1, '/+ SET_VAR(use_imci_engine=OFF) /', 'SELECT * FROM t1 WHERE id = 1');
    通过这样的 outline 可以辅助固化这一条的计划。
    此回答整理自钉群“PolarDB专家面对面 - HTAP(列存索引)”

    2024-03-27 19:47:43
    赞同 展开评论 打赏

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载