php网站开发和部署,网页美工设计师工作内容,常见的跨境电商平台有哪些,网络营销是网上销售吗场景#xff1a; 需要获取部分数据集(视图)的业务时间最大值#xff0c;希望只通过一条语句获取多个的最大值。 则使用select (视图1业务时间最大值),(视图2业务时间最大值),(视图3业务时间最大值) from dual 程序执行过程中#xff0c;发现语句执行较慢#xff0c;则进行s… 场景 需要获取部分数据集(视图)的业务时间最大值希望只通过一条语句获取多个的最大值。 则使用select (视图1业务时间最大值),(视图2业务时间最大值),(视图3业务时间最大值) from dual 程序执行过程中发现语句执行较慢则进行sql调优。 使用子方式查询获取最大值
子查询是一个嵌套在另一个查询语句中的查询语句。它可以被视为一个查询被包含在另一个查询中的过滤条件可以在查询语句中的WHEREFROM或SELECT子句中使用。子查询可以返回单个值、单个行或多个行并且可以被用来解决复杂性问题或减少查询中的代码复杂性。
select (SELECT max(SJGXSJ) TIME_MAXFROM v_yewu1where SJGXSJ sysdate - 1and SJGXSJ sysdate) AS TIME1,NULL AS TIME2,NULL AS TIME3,NULL AS TIME4,NULL AS TIME5from dualwhere 1 1 如图效果很不理想。 如果是拿子查询的语句出来单独查询就会走时间索引就很快。
使用union方式查询获取最大值 改成union空表 union是合并两个查询的怎么也会导致执行计划发生改变呢第一时间想到的是union中去重导致的。然后我吧union 改成union all结果执行计划还是很糟糕。
使用join方式查询获取最大值
最后把语句改成关联的形式总算是满足了实际的业务需要。
select t1.TIME_MAX AS TIME1,t2.TIME_MAX AS TIME2,NULL AS TIME3,NULL AS TIME4,NULL AS TIME5from (SELECT max(SJGXSJ) TIME_MAXFROM v_yuwu1where SJGXSJ sysdate - 1and SJGXSJ sysdate) t1,(SELECT max(SJGXSJ) TIME_MAXFROM v_yuwu2where SJGXSJ sysdate - 1and SJGXSJ sysdate) t2awhere 1 1 总结
sql执行过程中视图查询使用子查询、union或者多层视图嵌套都可能会导致执行计划发生改变多层视图嵌套结构的语句where条件位置等都有可能导致执行计划发生改变索引不生效的问题这些应当尽量避免。sql调优过程中也可以使用些hint进行优化。使用视图查询还是有明显的劣势条件允许尽量使用直接的sql语句查询并且避免sql里面用到视图。