【发布时间】:2015-03-20 19:59:07
【问题描述】:
在 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(log n),我们天真地做一个 indexof 排序,像这样:
data.sort(function(a, b) {
return indexOf(a) < indexOf(b);
});
那么我们每个排序操作可能需要 O(2n),使我们的总算法时间变成 O(n log n)。
然后我们可以为位置创建一个简单的值索引,而不是每次都使用。假设这也有 O(log n) 的最坏时间,那么对于我们的排序算法,我们得到 O((log n)(log n)) 或 O((log n)^2)。这对于算法来说并不是很好的性能。
Postgres 使用什么算法,什么性能?如果它优于 O((log n) * the_sort_algorithms_performance),我们将在 db 之外实现排序。或者,如果算法是一种我们可以轻松移植到 Java 的算法,我们可能仍然无法在 Postgres 中进行排序。
【问题讨论】:
-
"psql" 是命令行界面的名称,不是 Postgres 的有效名称。
-
通过测试似乎很容易确定。
标签: algorithm postgresql sorting sql-order-by