-2

这可能吗 ?并且在大约 10,000 个条目的表上进行查询会减慢服务器的速度吗?

我的查询目前是

SELECT title, number1, number2 ORDER BY number1

我想做这样的事情

SELECT title, number1, number2 ORDER BY (number1 + (number2 *100)) 
4

4 回答 4

0

尝试:

SELECT title, number1, number2, (number1 + (number2 *100)) as OrderCondition  
ORDER BY OrderCondition

如果您不希望性能命中缓存结果并为其添加索引。

于 2013-04-20T13:17:39.013 回答
0

您在表中创建第四列,例如“myindex”。在此列中,您输入方程式的结果。(这可以在 PHP 中完成,也可以在 INSERT 上使用触发器。)然后您只需按 myindex 选择 order。这应该更有效率。

于 2013-04-20T13:19:33.653 回答
0

是的,可以这样做,您可以使用 rokburgar 建议的别名或仅包含(number1 + (number2 *100)),但是此计算也必须包含在SELECT语句中:

SELECT title, number1, number2, (number1 + (number2 *100)) ORDER BY (number1 + (number2 *100))

作为参考,您还可以在这里查看:MySQL sort on a calculation

于 2013-04-20T13:23:54.260 回答
0

一般来说,在使用数据库时,读取和写入数据的开销比计算的开销要多得多。要进行排序,使用文件排序,必须多次读取和写入数据。这将比额外的计算花费更长的时间。

因此,在查询使用文件排序的情况下,答案是计算在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).

于 2013-04-20T15:32:39.030 回答