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