小编Mik*_*rst的帖子

PostgreSQL not using index on a filtered multiple sort query

I have a pretty simple table

CREATE TABLE approved_posts (
  project_id INTEGER,
  feed_id INTEGER,
  post_id INTEGER,
  approved_time TIMESTAMP NOT NULL,
  post_time TIMESTAMP NOT NULL,
  PRIMARY KEY (project_id, feed_id, post_id)
)
Run Code Online (Sandbox Code Playgroud)

And I'm trying to optimize this query:

SELECT *
FROM approved_posts
WHERE feed_id IN (?, ?, ?)
AND project_id = ?
ORDER BY approved_time DESC, post_time DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

The query optimizer is fetching every single approved_post that matches the predicate, sorting all 100k results, and returning the top one …

sql sorting postgresql indexing postgresql-performance

6
推荐指数
1
解决办法
3811
查看次数

Haskell提示/为什么不能线性扩展?

我的朋友写了一个程序,它比较模具面的随机排列,找到面部分布最均匀的面孔 - 特别是当面部不仅仅是一个序列时.

我将他的程序翻译成了haskell,因为我一直在寻找一个理由来谈论别人的耳朵,看看有多酷.但是,我对haskell并不是很精通(我花了很长时间才写出它并经历了几次巨大的重构)所以我有两个问题.

  1. 他在优化他的版本方面一直很重要,而且速度不是很快,并且不能线性扩展.我搞砸了一些尾递归还是某种更大的问题?
  2. 由此产生的代码实际上并不像我预测的那样优雅.我知道这不是一个讨论板,但如果你有任何关于如何简化它的想法我很满意

这是最相关的代码:

-- _CENTERS :: [{ x :: Float, y :: Float, z :: Float}]
-- _VALUES :: [Num]

-- Basically just (repeat $ map rand [0.._SIDES]), but never using a seed twice
randstates from = (take _SIDES (infrand from)) : randstates newseed
    where   infrand seed = seed : infrand (shuffle seed)
            newseed      = (infrand from) !! (_SIDES + 1)

-- yates shuffle
yates _ (last:[]) = [last]
yates (rand:pass) (swap:order) = choice:yates pass rorder …
Run Code Online (Sandbox Code Playgroud)

recursion haskell tail-recursion

5
推荐指数
1
解决办法
266
查看次数