Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何通过给每列赋予不同的权重来对结果进行排序?_Mysql_Sql Server_Logic - Fatal编程技术网

Mysql 如何通过给每列赋予不同的权重来对结果进行排序?

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

我想对来自sql数据库(mysql或sql server)的结果进行排序。但有不止一列,每列都有不同的权重进行排序,例如

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作为新列

  • 然后在前端对其进行排序。

    我试过了,效果很好。我喜欢这个简单的解决方案。只需保存计算。我的数字不是常量,因为我是从用户那里获得的。您可以添加一个新的索引列权重,并创建一个触发器来计算每次插入/更新时的值。那就按重量订购吧。