MySQL8差劲的CBO

2023年 8月 15日 22.4k 0

问题1:

从上图的执行计划中可以看到,是两个执行计划,同样的是使用的索引idx_test。当在关联表中使用idx_test索引没有产生filter当在单表查询中虽然索引覆盖了where条件中的列是会产生filter的

问题2:

不理解的是为什么MySQL的执行计划使用where条件的覆盖索引得出的行数和使用关联列得出的行数为啥不一样呢

如上两图是一个sql跑出来的执行计划,t表的where条件如下,相信大家从执行计划中也看出来了。

t.deleted = 0

AND t.company_code = 'XLYY0'

AND t.accrual_rebate_status = 0

最上面的图的执行计划用的索引是组合索引idx_com_expect_rebate_status_createtime(company_code,expect_rebate_status,create_time)

在执行计划中刚好查询出来的结果是155421行,如下图

而使用了组合索引idx_test(company_code,deleted,accrual_rebate_status)的执行计划扫描了155671要多出几百行,为什么用了覆盖索引的行数倒多了

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论