查询优化

关联列类型不同

在实际项目中,有时候会遇到,关联查询时关联列的数据类型不同,这样会导致走不到索引,下面我们来看一下实际例子:

查询SQL:

SQL优化之关联列类型不同_SQL

查询结果如下:

SQL优化之关联列类型不同_字段类型_02

可以看到,查询结果是1.581秒,这里只查询一条,一般需要一次查询1000条或是2000条。会达到3秒左右。

我们将SQL分析一下:

SQL优化之关联列类型不同_字段类型_03

可以看到,我们sale表type 是 all, 查询了全表的1720651条。所以就是sale表没走到索引。

查询b表和sale表的相应字段,发现b表的tid是bigint类型,sale表的order_num字段是varchar类型。字段类型不同,走不到索引,我们将关联的条件换成下面的:

on cast(b.tid as char) = sale.order_num

也可以是

on convert(b.tid , char) = sale.order_num

再次查询:

SQL优化之关联列类型不同_字段类型_04

可以看到,结果查询的时间是0.098表,查询的时间快了十几倍。

再次分析一下SQL:

SQL优化之关联列类型不同_字段_05

可以看到 type由 all 变成了 ref,查询条数变成了1。
算是有意识的优化查询SQL吧,这也是注重效率的开始,加油!