问题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要多出几百行,为什么用了覆盖索引的行数倒多了