下面的SQL查询执行大约需要6-7分钟,它将返回~5833135行,有什么可以帮助我解决它的性能问题吗

下面的SQL查询执行大约需要6-7分钟,它将返回~5833135行,有什么可以帮助我解决它的性能问题吗,sql,postgresql,performance,psql,postgresql-9.5,Sql,Postgresql,Performance,Psql,Postgresql 9.5,下面的SQL查询执行大约需要6-7分钟,它将返回~5833135行,有什么可以帮助我解决它的性能问题吗 SQL 使用这样的查询,您无法优化太多内容 按照有效性的顺序: 在机器中放入足够的RAM以缓存整个数据库 为此查询设置尽可能大的work\u mem 如果EXPLAIN输出中存在嵌套循环联接(不太可能),则联接列上的索引可能会有所帮助 您只能从一个表中进行选择,这是左连接系列的第一个表 我想知道这是否符合您的要求: select min(aml.id) as id, aml.n

下面的SQL查询执行大约需要6-7分钟,它将返回~5833135行,有什么可以帮助我解决它的性能问题吗

SQL
使用这样的查询,您无法优化太多内容

按照有效性的顺序:

  • 在机器中放入足够的RAM以缓存整个数据库

  • 为此查询设置尽可能大的
    work\u mem

  • 如果
    EXPLAIN
    输出中存在嵌套循环联接(不太可能),则联接列上的索引可能会有所帮助


您只能从一个表中进行选择,这是
左连接系列的第一个表

我想知道这是否符合您的要求:

select min(aml.id) as id,
       aml.name as name,
       round(sum(aml.debit), 2) as debit,
       round(sum(aml.credit), 2) as credit,
       round(sum(aml.balance), 2) as balance,
       aml.account_id as account_id,
       aml.move_id as move_id,
       aml.payment_id as payment_id,
       aml.statement_id as statement_id,
       aml.journal_id as journal_id,
       aml.date as date,
       aml.company_id as company_id,
       aml.invoice_id as invoice_id,
       aml.partner_id as partner_id,
       aml.company_currency_id as company_currency_id
from account_move_line aml
group by aml.name, aml.debit, aml.credit, aml.balance,
         aml.account_id, aml.move_id, aml.payment_id,
         aml.statement_id, aml.journal_id, aml.date,
         aml.company_id,  aml.invoice_id, aml.partner_id,
         aml.company_currency_id;

然后,您将通过如此多的列进行聚合,我想知道是否有必要进行聚合。

500万行,需要传输大量数据。冷数据还是热数据?为什么不使用表中的任何内容?删除它们或
内部连接
热帐户数据,直到需要7min@Mack . . . 至少您可以尝试优化一个简单得多的查询。
select min(aml.id) as id,
       aml.name as name,
       round(sum(aml.debit), 2) as debit,
       round(sum(aml.credit), 2) as credit,
       round(sum(aml.balance), 2) as balance,
       aml.account_id as account_id,
       aml.move_id as move_id,
       aml.payment_id as payment_id,
       aml.statement_id as statement_id,
       aml.journal_id as journal_id,
       aml.date as date,
       aml.company_id as company_id,
       aml.invoice_id as invoice_id,
       aml.partner_id as partner_id,
       aml.company_currency_id as company_currency_id
from account_move_line aml
group by aml.name, aml.debit, aml.credit, aml.balance,
         aml.account_id, aml.move_id, aml.payment_id,
         aml.statement_id, aml.journal_id, aml.date,
         aml.company_id,  aml.invoice_id, aml.partner_id,
         aml.company_currency_id;