# 多表连接分析

+ 驱动表优化

```
ALTER TABLE t1 ADD INDEX idx_c(c)

```

![left](./student-guide/diagram/01-49-1.png)

------------------------------------------------------------

首先我们分析下驱动表t1的优化，如果过滤条件过滤性比较好，那直接在 t1 上加上索引就很明显的降低驱动表的数据扫描和过滤成本，但是如果 t1.c>'96743211' 这个条件过滤出来的数据量比较大，比如占 t1 表整体数据量的1/5(经验值)甚至更多，那优化器的代价估算模型里，可能会认为走全表扫描或者其它索引(比如如果 t1 表的 join 字段 k 有索引的话)代价更小，而不选择利用 t1.c 字段上的索引，这样就算在 t1.c 上加索引也无法达到预期的效果，反而增加了写入和存储压力。

我们从这个 SQL 语句的执行计划里看到，t1 表根据 c 字段过滤后，大概有 3.4万 条记录，占总体数据量比例还是比较小的，所以在 c 上增加索引过滤性不错，所以我们就选择在 t1 的 c 字段上增加索引：ALTER TABLE t1 ADD INDEX idx_c(c)。
