1

我在 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 创建了一个索引。有什么建议可以让它更快吗?

4

1 回答 1

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);
于 2013-06-06T21:12:14.623 回答