按性能瓶颈分组?

时间:2013-12-30 10:14:46

标签: informix

所以,我有一个相对简单的查询,它对11个不同的列进行了总和。查询本身运行速度非常快,但似乎按11列分组非常慢。

这是一个解释文件的摘录,它显示查询运行了两秒钟,但花了将近17秒的时间对数据进行分组。有什么可以优化的吗?

Query statistics:
-----------------

  Table map :
  ----------------------------
  Internal name     Table name
  ----------------------------
  t1                ustroj
  t2                tfinkbilanca
  t3                tfinkkontogodina
  t4                tbaseanalitikanaziv

  type     table  rows_prod  est_rows  rows_scan  time       est_cost
  -------------------------------------------------------------------
  scan     t1     77         12        77         00:00.00   2       

  type     table  rows_prod  est_rows  rows_scan  time       est_cost
  -------------------------------------------------------------------
  scan     t2     76231      77376     76231      00:00.36   90      

  type     table  rows_prod  est_rows  rows_scan  time       est_cost
  -------------------------------------------------------------------
  scan     t3     152462     19203     76231      00:00.67   1       

  type     rows_prod  est_rows  time       est_cost
  -------------------------------------------------
  nljoin   152462     41266     00:01.05   337835  

  type     rows_prod  est_rows  time       est_cost
  -------------------------------------------------
  nljoin   76231      644       00:01.08   37456   

  type     table  rows_prod  est_rows  rows_scan  time       est_cost
  -------------------------------------------------------------------
  scan     t4     151780     33        75890      00:00.77   0       

  type     rows_prod  est_rows  time       est_cost
  -------------------------------------------------
  nljoin   76231      632       00:01.86   38828   

  type     rows_prod  est_rows  rows_cons  time
  -------------------------------------------------
  group    15158      316       76231      00:16.55

  type     rows_sort  est_rows  rows_cons  time
  -------------------------------------------------
  sort     55         316       15158      00:16.93

1 个答案:

答案 0 :(得分:1)

首先,我建议您验证查询“保存”到临时表(包括into temp tmp01 with no log)的时间,您可以在评论中回答时间不变。

考虑到提到的大字段(char(256))作为某些内容的描述,我的建议是:

  • 在组中仅使用键列。如果可能,请使用ID /代码。
  • 使用“group by”保存到临时表中执行SQL。
  • 在此临时表上执行其他SQL并加入以获取说明。 (char(256)fields)

请接受答案,如果他们真的适合你...如果有用但不能解决你的问题只为它设置+1