Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm PostgreSQL中任意排序的性能如何?_Algorithm_Postgresql_Sorting_Sql Order By - Fatal编程技术网

Algorithm PostgreSQL中任意排序的性能如何?

Algorithm PostgreSQL中任意排序的性能如何?,algorithm,postgresql,sorting,sql-order-by,Algorithm,Postgresql,Sorting,Sql Order By,在Postgres中,可以执行这样的命令 SELECT * FROM mytable WHERE id in (8, 6, 7, 5, 10, 24) ORDER BY id=8 DESC, id=6 DESC, id=7 DESC, id=5 DESC, id=10 DESC, id=24 DESC; 按任意顺序选择任意数据 我已经计算出,如果某个排序算法有O(logn),我们天真地做了如下索引排序: data.sort(function(a, b) { return indexOf

在Postgres中,可以执行这样的命令

SELECT * FROM mytable
WHERE id in (8, 6, 7, 5, 10, 24)
ORDER BY id=8 DESC, id=6 DESC, id=7 DESC, id=5 DESC, id=10 DESC, id=24 DESC;
按任意顺序选择任意数据

我已经计算出,如果某个排序算法有O(logn),我们天真地做了如下索引排序:

data.sort(function(a, b) {
    return indexOf(a) < indexOf(b);
});
data.sort(函数(a,b){
返回索引of(a)
然后我们每个排序操作可能需要O(2n),使我们的总算法时间变成O(n logn)

然后,我们可以创建一个简单的位置值索引,而不是每次都使用。假设这也有一个最坏的时间O(logn),那么对于我们的排序算法,我们得到O((logn)(logn))或O((logn)^2)。对于一个算法来说,这不是很好的性能


Postgres使用什么算法,什么性能?如果它优于O((logn)*排序算法性能),我们将在数据库之外实现排序。或者,如果算法很容易移植到Java,我们可能仍然无法在Postgres中进行排序。

TLDR;不要详细讨论你的大问题。排序算法是一个复杂的领域

至于您的查询:如果您提供一个值列表,这可能会便宜得多,因为您必须以某种顺序传递值:

这是可行的,但没有保证。可以肯定的是(在9.4+的Postgres中):

详情:


“psql”是命令行界面的名称,而不是Postgres的有效名称。这似乎很容易通过测试确定。
SELECT t.*
FROM   unnest('{8, 6, 7, 5, 10, 24}'::int[]) id
JOIN   mytable t USING (id);
SELECT *
FROM   unnest('{8, 6, 7, 5, 10, 24}'::int[]) WITH ORDINALITY x(id, rn)
JOIN   mytable t USING (id)
ORDER  BY x.rn;