SQL中使用WITH AS提高性能

豆豆网   技术应用频道   2007年11月13日  【字号: 收藏本文

内容摘要:本文结合笔者实际的工作情况,说明了如何使用with as改写存储过程,从而大幅提高SQL的运行时间……

  )

  GROUP BY sku;

  我们来看该SQL所花费的时间为:

  SQL> set timing on

  SQL> /

  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  SKU INITQTY INQTY OUTQTY LASTQTY

  -------- ---------- ---------- ---------- ----------

  00106162 0 0 12 60

  00106467 0 20 10 60

  已选择956行。

  已用时间: 00: 00: 19.08

  然后,我们来对该SQL进行改写一番,如下所示:

  WITH result AS (

  SELECT /*+ materialize */ day,sku,inqty,outqty,lastqty

  FROM fin

  WHERE day>=to_date('20030713','yyyymmdd') AND day<=to_date('20030714','yyyymmdd'))

  SELECT

  sku,

  sum(initqty) as initqty,

  sum(inqty) as inqty,

  sum(outqty) as outqty,

  sum(lastqty) as lastqty

  FROM (

  SELECT sku,lastqty as initqty,0 as inqty,0 as outqty,0 as lastqty

  FROM result

  WHERE day=to_date('20030713','yyyymmdd')

  UNION ALL

  SELECT sku,0 as initqty,inqty,outqty,0 as lastqty

  FROM result

  WHERE day=to_date('20030714','yyyymmdd')

  UNION ALL

  SELECT sku,0 as initqty,0 as inqty,0 as outqty,lastqty

  FROM result

  WHERE day=to_date('20030714','yyyymmdd')

  )

  GROUP BY sku;

  我们来看修改后的SQL所花费的时间为:

  SQL> set timing on

  SQL> /

  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  SKU INITQTY INQTY OUTQTY LASTQTY

  -------- ---------- ---------- ---------- ----------

  00106162 0 0 12 60

  00106467 0 20 10 60

  已选择956行。

  已用时间: 00: 00: 06.06

  从这里可以看到,通过WITH AS可以从20秒降低到6秒,几乎提高了65%的性能。

来源:IT168    作者:hanson    责编:豆豆技术应用

正在加载评论...