【发布时间】:2013-11-07 11:17:28
【问题描述】:
当我在以下查询中删除 ORDER BY 时,我的查询从 15 秒变为 0.05 秒:
简化版:
SELECT field1, fiedl2, field 3,
FUNC1(1, 2) AS score1,
FUNC2(1, 2) AS score2,
FUNC3(1, 2) AS score3,
FUNC4(1, 2) AS score4
FROM table
WHERE field1 = 1
ORDER BY (score1 * 1 + score2 * 2 + score3 * 2 + score4 * 4) DESC;
我有几个计算子分数的存储函数。除了我必须根据总分排序结果。在 ORDER BY 中,我使用* 2 为子分数添加一些权重以影响总分。
我使用 MySQL 5.6.13
有没有人知道我可以如何制作 ORDER BY,但又不会放慢速度?
是否可以存储 score# 字段并将它们汇总?
谢谢!
【问题讨论】:
-
好的,我发现了一些东西。
score#是对存储函数的引用。 ORDER BY 是排序方法,它对这些参考进行了很多比较。所以存储的函数会被执行很多次。有没有办法将存储函数的返回值设置为静态字段?
标签: mysql performance sql-order-by stored-functions