Mysql 提高查询性能的步骤
我有一个嵌套查询:Mysql 提高查询性能的步骤,mysql,performance,Mysql,Performance,我有一个嵌套查询: 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('%/',
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;
但是需要很长时间,你能帮我提高他们的表现吗
谢谢一个简单的优化方法是:
- 自己创建过滤器变量,使用任何语言访问数据库
- 为“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%'
最后,在Pixel_X、Pixel_Y和新创建的列上建立复合索引可以进一步加快查询速度。感谢您的回答,但没有改进,而且该表是临时的,是否可以在临时表中创建索引?当然可以。临时表在所有情况下都等同于普通表。只是范围不同。可以将临时表的作用域设置为连接,这意味着连接的关闭将处理作用域设置为该连接的临时表。使用%..%筛选查询关系数据库效率低下-几乎总是需要扫描表。您的表使用哪种类型的引擎:MyISAM还是InnoDB?您是否尝试过在没有分组的情况下运行此查询以检查筛选需要多少时间?最后,过滤器2的可能值以及“GSM 850/900”列中的值是什么?