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?条件字段都加上索引了
在PolarDB中,执行计划的扫描行数表示查询需要扫描的数据行数。如果tbl_order_link_imei表的扫描行数不是1,可能是因为以下原因:
索引不匹配:即使您已经为条件字段创建了索引,但如果您在查询中使用了错误的索引或没有使用索引,则查询可能会扫描更多的数据行。请确保您正在使用正确的索引,并且该索引与查询条件相匹配。
数据分布不均匀:如果表中的数据分布不均匀,即某些值出现的频率更高,那么查询可能需要扫描更多的数据行。在这种情况下,您可以考虑重新设计表结构或调整数据分布,以使查询更加高效。
统计信息不准确:如果PolarDB的统计信息不准确,则查询优化器可能无法选择最佳的执行计划。在这种情况下,您可以尝试更新统计信息,以便查询优化器可以更准确地估计数据分布和查询成本。
总之,要确定为什么tbl_order_link_imei表的扫描行数不是1,需要进一步分析查询计划、索引、数据分布和统计信息等因素。
这个选的是hash join,并不是index lookup。字符集不同会导致索引失效。此回答整理自钉群“PolarDB 专家面对面 - 慢SQL索引选择优化器新特性”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。