什么是SQL中的冗余字段?
可以从2个角度来看,如果是逻辑的角度来看,SQL语句中那些字段,将它们去除后对SQL的执行结果没有任何影响,就是冗余字段;如果是需求的角度来看,那些需求没有用到的字段就是冗余字段。这些字段的存在会增加SQL执行时IO的消耗,降低查询的性能。
如何识别冗余字段?
通过分析获取血缘关系,计算数据的引用关系,就能够计算出冗余字段
进入http://sqllineage.com/cut
在左侧输入框内输入分析的SQL,点击工具栏第一个按钮
勾选需求没有用到的字段名OK确认
工具会分别显示分析前后的SQL语句
为了更好的对比修改前后的SQL,首先对修改的前后的SQL都做了格式化处理, 对于冗余字段添加了备注的标签,并对字段间的逗号分割符做了特殊处理
演示工具只做到1条SQL的识别和修改,针对实际生产中使用存储过程或多组SQL来共同完成数据生产的场景。 在API调用方式中,结果会包含每个引用表需要处理的冗余字段,如果这个表是另一个SQL生产的中间结果, 可以递归调用API接口,可以优化数据生产流程中所有的SQL。
优化工具依靠纯粹的分析SQL还有那些进步的空间?
优化select *, 将查询全部字段优化为只包含用到的字段。
空表消除,当一个表的所有字段都被标记为冗余字段,抹去这个表在SQL中的影响。
谓语下推,在多层递归优化多条SQL的场景下,更早的对数据进行过滤优化性能。
归纳多个SQL中公用的中间结果复用,相同的数据逻辑只计算一次。
取消排序,在多个结果集数据关联时,只保留对结果顺序有影响的排序子句。