Sql 查询列数较大的表

Sql 查询列数较大的表,sql,postgresql,Sql,Postgresql,我有一个表,其中有一些列包含大文本数据。查询10行(表只有31条记录)需要20秒以上。如果删除较大的字段,查询将快速执行。对1行(按id)的查询始终快速执行 如何才能更快地查询多行 查询如下所示 SELECT DISTINCT (a.id), a.field_1, a.field_2, a.field_3 , a.field_4, a.field_5, a.filed_6, ... FROM table_a a, table_b b WHERE a.field_8 = 'o'

我有一个表,其中有一些列包含大文本数据。查询10行(表只有31条记录)需要20秒以上。如果删除较大的字段,查询将快速执行。对1行(按id)的查询始终快速执行

如何才能更快地查询多行

查询如下所示

SELECT DISTINCT (a.id), a.field_1, a.field_2, a.field_3
    , a.field_4, a.field_5, a.filed_6, ...  
FROM table_a a, table_b b 
WHERE a.field_8 = 'o'  
ORDER BY a.field_2 DESC 
LIMIT 10;
SELECT DISTINCT
    (a.id), a.field_1, a.field_2, a.field_3, a.field_4, a.field_5, a.filed_6 
FROM table_a a
INNER JOIN table_b b
    ON b.field_on_table_b = a.field_on_table_a
WHERE a.field_8 = 'o'
ORDER BY a.field_2 DESC LIMIT 10

为什么选择表b?你不能加入这张桌子! 像这样做一个真正的连接

SELECT DISTINCT (a.id), a.field_1, a.field_2, a.field_3
    , a.field_4, a.field_5, a.filed_6, ...  
FROM table_a a, table_b b 
WHERE a.field_8 = 'o'  
ORDER BY a.field_2 DESC 
LIMIT 10;
SELECT DISTINCT
    (a.id), a.field_1, a.field_2, a.field_3, a.field_4, a.field_5, a.filed_6 
FROM table_a a
INNER JOIN table_b b
    ON b.field_on_table_b = a.field_on_table_a
WHERE a.field_8 = 'o'
ORDER BY a.field_2 DESC LIMIT 10

然后确保字段_8(在where语句中)是用键定义的

@a_horse已经暗示了可能的语法错误。尝试:

SELECT DISTINCT ON (a.id) a.id, a.field_1, a.field_2, a.field_3, ... FROM table_a a -- JOIN table_b b ON ??? WHERE a.field_8 = 'o' ORDER BY a.id, a.field_2 DESC LIMIT 10;
DISTINCT
不是一个函数。您正在使用的语法不会仅对ID列执行distinct操作,而是对所有列执行distinct操作@一匹没有名字的马,是的,你说得对!现在它更快了,但没有我们想要的那么快。也许还有其他原因?没有查询计划的性能分析主要是猜测,请在更正不同的ONY后,在您的查询上发布EXPLAIN analysis的输出,我已经用
DISTINCT
研究了这个问题。当我使用
GROUPBY a.id
时,postgres希望我使用GROUPBY section中表格的所有列。正如我提到的,这适用于9.1版(或更高版本),其中主键覆盖整个表格。你忘了提到你的PostgreSQL版本,这让你很难帮上忙。对于早期版本,重复
GROUP BY
子句中
SELECT
列表的所有非聚合列,或在子查询中使用
DISTINCT ON(id)
,并在外部查询中应用
ORDER BY/LIMIT