做网站注意,网站模版上线需要什么,做一个小说阅读网站怎么做,餐饮品牌策划需求有两个不同的表#xff0c;A表是基础数据#xff0c;B表根据A表的某个不重复关键字加其他一些条件查询出一条或几条数据#xff0c;取其中一条数据。并且利用此数据某个关键字再在B表中查询下一层级数据#xff0c;最终将A表的对应一条数据#xff0c;B表查询出的两条…需求有两个不同的表A表是基础数据B表根据A表的某个不重复关键字加其他一些条件查询出一条或几条数据取其中一条数据。并且利用此数据某个关键字再在B表中查询下一层级数据最终将A表的对应一条数据B表查询出的两条数据拼成一条数据返回。由于这个联合查询的结果用的频次与量都很大所以做成了view一开始是使用function来控制leftjoin条件筛选数据与匹配。但是若是把function作为条件整个sql语句的查询效率很差在每次执行查询都需要3s左右。对系统的运行速度与稳定行都产生了一定的影响。解决方案在优化中考虑的就是去除sql中的function但是在function中可以很方便的进行判断与错误处理可以避免由于数据问题导致整个view无法使用。将function改成sql就要考虑到数据多或少的情况下如何保证准确性。由于业务要求可以满足所以最终的sql中A表只执行匹配0条或者1条B表中的数据。最终代码如下CREATE OR REPLACE VIEW ERP_MPS_PROCESS ASSELECT distinct *FROM SAP_ITEM_DIE T --A表left join (select h.parent_code,max(h.component_code) as component_code,h.werks,h.stktxfrom ERP_BOM h --B表left join erp_product_details jon h.component_code j.item_codeand h.werks j.dept_codewhere j.material_type Z350group by h.parent_code, h.werks, h.stktx) kon k.parent_code T.MTNR1and k.stktx t.equnrleft join (select m.parent_code, max(m.component_code) as refcodefrom ERP_BOM m --B表第二次取值left join erp_product_details non m.component_code n.item_codeand m.werks n.dept_codewhere n.material_type Z300group by m.parent_code) oon o.parent_code k.component_code;利用max函数保证取出的数据不超过一条再利用对应条件与left join替代function的功能。结果在使用了替代方案后整体查询时间在0.1s到0.2s中相对于原本3s有了很大的提升当然此方法仍有优化的空间哪位有更好的方法也请不吝赐教。