我在Mysql select语句中有计算。我发现它使查询变慢。
SELECT MIN(a) AS MIN,
ROUND(100*(a/b), 1) AS mos
FROM TABLE_NAME
WHERE a > 0
AND b > 0
AND c <= 148
AND d >=-100 HAVING mos <= 300.1
如果我删除计算,它会快得多。
SELECT a,b
FROM TABLE_NAME
WHERE a > 0
AND b > 0
AND c <= 148
AND d >=-100
我已经为a,b,c,d创建了一个索引。有什么建议如何让它更快?
答案 0 :(得分:0)
如果mos
计算结果是您的速度问题的根源,您可能需要考虑将其添加为您在插入和更新时预先计算的额外列,而不是每次重新计算它每次运行此查询时都会显示行。
您可以在更新数据库的代码中手动执行此操作,或者如果您使用的是支持触发器的mysql版本,我认为您应该能够创建一个触发器来自动更新列。
例如,INSERT触发器可能如下所示:
CREATE TRIGGER ins_mos BEFORE INSERT ON TABLE_NAME
FOR EACH ROW SET NEW.mos = ROUND(100*(NEW.a/NEW.b), 1);