这可能吗?它是否会通过查询大约10,000个条目的表来减慢服务器的速度?
我的查询目前是
SELECT title, number1, number2 ORDER BY number1
我想做这样的事情
SELECT title, number1, number2 ORDER BY (number1 + (number2 *100))
答案 0 :(得分:0)
尝试:
SELECT title, number1, number2, (number1 + (number2 *100)) as OrderCondition
ORDER BY OrderCondition
如果您不希望性能命中缓存结果并为其添加索引。
答案 1 :(得分:0)
您在表格中创建第四列,如“myindex”。 在此列中,您可以输入等式的结果。 (这可以在PHP中或在INSERT上使用触发器完成。) 然后你只需按myindex选择订单。这应该更有效率。
答案 2 :(得分:0)
是的,可以这样做,你可以使用rokburgar建议的别名或只包括(number1 + (number2 *100))
,但是这个计算也必须包含在SELECT
语句中:
SELECT title, number1, number2, (number1 + (number2 *100)) ORDER BY (number1 + (number2 *100))
作为参考,您还可以在这里查看:MySQL sort on a calculation
答案 3 :(得分:0)
通常,在使用数据库时,读取和写入数据的开销远远大于计算开销。要使用filesort进行排序,必须多次读取和写入数据。这将比额外的计算花费更长的时间。
因此,在查询使用filesort的情况下,答案是order by
中的计算在开销方面可以忽略不计。
另一方面,如果您要比较以下内容:
select title, number1, number2
from t
order by number1
AND 你有number1
的索引,然后这将直接使用索引,绕过filesort。在这种情况下,order by
中的计算会导致执行计划的成本更高。
如果表达式(number1 + (number2 *100))
是您真正关心的数据元素,您可以考虑将其直接存储在数据库中并在其上构建索引,可能使用触发器来保持更新。
如果你知道number
总是在0到99之间,那么你可以通过以下方式获得更好的表现:
order by number2, number1
且索引为(number2, number1)
。