Sql 如何使用DISTINCT减少查询执行时间?

Sql 如何使用DISTINCT减少查询执行时间?,sql,postgresql,database-design,database-performance,Sql,Postgresql,Database Design,Database Performance,我有一个缓慢的疑问: SELECT DISTINCT ON ( topic_category_id ) * FROM topic t WHERE abstime ( post_time + 24 * 3600 ) >= now ( ) ORDER BY topic_category_id, post_time DESC LIMIT 10; 这是因为我使用DISTINCT,但我可以找到如何更改此查询。我不能使用GROUP BY,因为我需要在邮寄时间之前订购。请告知这可

我有一个缓慢的疑问:

   SELECT DISTINCT ON ( topic_category_id ) * FROM topic t
    WHERE abstime ( post_time + 24 * 3600 ) >= now ( )
    ORDER BY topic_category_id, post_time DESC LIMIT 10;

这是因为我使用DISTINCT,但我可以找到如何更改此查询。我不能使用GROUP BY,因为我需要在邮寄时间之前订购。请告知

这可能值得一试:

   SELECT DISTINCT ON ( topic_category_id ) * FROM topic t
    WHERE post_time >= abstime(now ( ) - 24 * 3600 )
    ORDER BY topic_category_id, post_time DESC LIMIT 10;

它可能更快的原因是Postgres只能进行一次时间计算,而不是对返回的每一行进行计算

你能用abstime post_time+24*3600预计算一列吗?所以你可以试着在它上面建立一个索引,你使用哪个Postgres版本?Abtime是一种不推荐使用的内部日期时间类型。我已经在post_time列上建立了索引。我有PostgreSql 8.4.SELECT DISTINCT ON topic_category_id*FROM SELECT*FROM topic t其中Abtime post_time+24*3600>=now ORDER BY post_time DESC LIMIT 500 tmp ORDER BY topic_category_id LIMIT 10;这个查询很快,但它有限制问题,当我尝试删除限制500时,查询变得很慢。