• mw
    2024-10-17 来自上海
    老师好,请教个问题:在选择驱动表的时候 需要过滤where 之后的所有条件之后以数据量小的作为驱动表。 1、那要是where之后的条件没有索引或者无法使用索引的Cardinality进行估算过滤,那选择驱动表的时候就需要扫描全表过滤出符合where条件的数据,然后每个表比较符合的数据量大小,之后选出驱动表吗? 还是说有其他的计算方法。 2、如果where后面同时存在一个表的索引字段条件和非索引字段条件,需要索引字段过滤之后 再过滤非索引字段的条件吗?

    作者回复: 问题1. 我的理解是,如果没有索引,是按全表的记录数来。如果用了索引访问(range、ref),按range或ref条件的扫描记录数来。可以开optimizer_trace,设计几个测试案例来验证下。 问题2. 看执行计划。如果用了索引的range或ref,先按索引条件到索引中扫描,再判断下推的索引条件,然后再到server层判断剩余的条件。

    
    