Mysql 如何通过给每列赋予不同的权重来对结果进行排序?
我想对来自sql数据库(mysql或sql server)的结果进行排序。但有不止一列,每列都有不同的权重进行排序,例如Mysql 如何通过给每列赋予不同的权重来对结果进行排序?,mysql,sql-server,logic,Mysql,Sql Server,Logic,我想对来自sql数据库(mysql或sql server)的结果进行排序。但有不止一列,每列都有不同的权重进行排序,例如 SELECT F1,F2,F3 FROM mytable ORDER BY (F1*2+F2*7+F3) 但我担心这需要太长的时间来处理,因为我的数据库可能有数百万条记录,所以对这些数据量进行排序并计算所有记录的公式可能会非常慢,我如何才能更快地完成这项工作 编辑:这些重量数字不是常数如果数字是常数,则创建一个计算列 ALTER TABLE mytable ADD O
SELECT F1,F2,F3 FROM mytable ORDER BY (F1*2+F2*7+F3)
但我担心这需要太长的时间来处理,因为我的数据库可能有数百万条记录,所以对这些数据量进行排序并计算所有记录的公式可能会非常慢,我如何才能更快地完成这项工作
编辑:这些重量数字不是常数如果数字是常数,则创建一个
计算列
ALTER TABLE mytable
ADD O_ComputedColumn AS (F1*2+F2*7+F3) PERSISTED
使计算列持久化的一些优点是什么
查询:
SELECT F1,F2,F3
FROM mytable
ORDER BY O_ComputedColumn
这是针对SQLServer
。我从来没试过试一下,这个主意不错。
看,还有两种方法可以实现这一点,但这两种方法都不需要更多的信息
1.在不排序的情况下拉动所有需要的行。然后在前端对其进行排序。这可能会很快
这样写你的问题
从mytable中选择F1、F2、F3、F1*2+F2*7+F3作为新列
然后在前端对其进行排序。我试过了,效果很好。我喜欢这个简单的解决方案。只需保存计算。我的数字不是常量,因为我是从用户那里获得的。您可以添加一个新的索引列权重,并创建一个触发器来计算每次插入/更新时的值。那就按重量订购吧。