提高查询性能

时间:2012-10-26 06:44:17

标签: mysql performance

我hava巢查询:

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;

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

由于

1 个答案:

答案 0 :(得分: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和新创建的列的复合索引可以进一步加快查询速度。