0

我有嵌套查询:

SELECT PIXEL_X as 'X_Coord', PIXEL_Y as 'Y_Coord', 
CONVERTWATTS2DBM_udf(SUM(L2_VALUE)/SUM(L3_VALUE)) as 'Pixel_Value' 
   FROM table  
   WHERE  
      ('GSM 850/900' like CONCAT('%',FILTER2,'/%') OR 
       'GSM 850/900' like CONCAT('%/',FILTER2,'%') ) 
GROUP BY X_Coord, Y_Coord;

但是需要很长时间,你能帮我提高他们的表现吗?

谢谢

4

1 回答 1

0

一个直接的优化方法是这样的:

  • 以您用于访问数据库的任何语言自行创建过滤器变量。
  • 为“GMS 850/900”的每个选项设置一个查询,然后使用 UNION 将它们连接在一起,如下所示:

    SELECT PIXEL_X as 'X_Coord', PIXEL_Y as 'Y_Coord', 
    CONVERTWATTS2DBM_udf(SUM(L2_VALUE)/SUM(L3_VALUE)) as 'Pixel_Value' 
    FROM table  WHERE  
    'GSM 850/900' like '%YOURVALUE1%'
    UNION
    SELECT PIXEL_X as 'X_Coord', PIXEL_Y as 'Y_Coord', 
    CONVERTWATTS2DBM_udf(SUM(L2_VALUE)/SUM(L3_VALUE)) as 'Pixel_Value' 
    FROM table  WHERE  
    'GSM 850/900' like '%YOURVALUE2%'
    

这应该会加快查询速度。

此外,如果您事先生成了动态生成的值,它将大大加快查询速度。您可以在 ON WRITE 触发器中创建列并生成 CONVERTWATTS2DBM_udf。这将消除不仅在每一行上运行此函数的必要性,而且在查询本身的每次运行上都运行此函数。

最后,对 Pixel_X、Pixel_Y 和新创建的列的复合索引可以进一步加快查询速度。

于 2012-10-26T06:58:15.620 回答