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

PolarDB这个SQL的执行计划,为什么tbl_order_link_imei的扫描行不是1?

898122b4d87157a7784fdb90f526df33.png
SELECT sql_no_cache COUNT(*) as countFROM warehouse.control_device as cd STRAIGHT_JOIN zulin.tbl_order_link_imei as ti FORCE index (uk_imei_devicetype_order) on cd.unique_code = ti.imei and cd.unique_device_type = ti.device_type STRAIGHT_JOIN zulin.v3_order as ouse index (idx_orderid_orderstatus) on o.order_id = ti.order_idWHERE o.order_status = 20索引:tbl_order_link_imei : uk_imei_devicetype_order(imei,device_type,order_id)麻烦看下PolarDB这个SQL的执行计划,为什么tbl_order_link_imei的扫描行不是1?条件字段都加上索引了

展开
收起
三分钟热度的鱼 2024-02-28 17:05:27 37 0
2 条回答
写回答
取消 提交回答
  • 阿里云大降价~

    在PolarDB中,执行计划的扫描行数表示查询需要扫描的数据行数。如果tbl_order_link_imei表的扫描行数不是1,可能是因为以下原因:

    1. 索引不匹配:即使您已经为条件字段创建了索引,但如果您在查询中使用了错误的索引或没有使用索引,则查询可能会扫描更多的数据行。请确保您正在使用正确的索引,并且该索引与查询条件相匹配。

    2. 数据分布不均匀:如果表中的数据分布不均匀,即某些值出现的频率更高,那么查询可能需要扫描更多的数据行。在这种情况下,您可以考虑重新设计表结构或调整数据分布,以使查询更加高效。

    3. 统计信息不准确:如果PolarDB的统计信息不准确,则查询优化器可能无法选择最佳的执行计划。在这种情况下,您可以尝试更新统计信息,以便查询优化器可以更准确地估计数据分布和查询成本。

    总之,要确定为什么tbl_order_link_imei表的扫描行数不是1,需要进一步分析查询计划、索引、数据分布和统计信息等因素。

    2024-02-29 18:46:11
    赞同 展开评论 打赏
  • 这个选的是hash join,并不是index lookup。字符集不同会导致索引失效。此回答整理自钉群“PolarDB 专家面对面 - 慢SQL索引选择优化器新特性”

    2024-02-28 19:21:23
    赞同 展开评论 打赏

相关产品

  • 云原生数据库 PolarDB
  • 相关电子书

    更多
    SQL Server 2017 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载