什么是SQL中的冗余字段? 这可以从2个角度来看: 如果是逻辑的角度来看,对SQL的执行结果没有任何影响的字段,就是冗余字段; 如果是需求的角度来看,那些需求没有用到的字段就是冗余字段。 这些字段的存在会增加SQL执行时IO的消耗,降低查询的性能。 这里开发一个清理冗余字段的工具软件,既可以分析SQL语句中冗余字段,也可以根据需求去掉需求不需要的字段,计算出优化后的SQL。 为了更好的对比修改前后的SQL,修改的前后的SQL都做了格式化处理,对于冗余字段添加了备注的标签,并对字段间的逗号分割符做了特殊处理。 http://sqllineage.com/cut
工具只提供了1条SQL的优化结果,但实际数据生产的时候,并不是孤立的一条SQL,而是由多个SQL组成的一个生产过程,一个字段的优化可能会产生一系列的冗余优化过程。 为此提供了一个API接口,调用API接口时,传入需要优化的SQL,返回优化后的SQL。 http://sqllineage.com/i/cut.json 返回结果中,将展示冗余字段的表名和具体字段,当这个表是数据生产链路中另一个SQL的结果时,可以反复调用这个接口,直到所有的SQL都优化完成。 这个接口还是个临时性质的接口,希望能收集大量的测试用例优化算法。 工具还规划了以下优化策略,尽请关注 1.优化select *, 将查询全部字段优化为只包含用到的字段。 2.空表消除,当一个表的所有字段都被标记为冗余字段,抹去这个表在SQL中的影响。 3.谓语下推,在多层递归优化多条SQL的场景下,更早的对数据进行过滤优化性能。 4.归纳多个SQL中公用的中间结果复用,相同的数据逻辑只计算一次。 5.取消排序,在多个结果集数据关联时,只保留对结果顺序有影响的排序子句。