如何使这个PostgreSQL查询更快?

时间:2013-09-11 11:15:56

标签: postgresql postgresql-9.2

这是表格:

dt VARCHAR(65)
ct VARCHAR(65)
amount INT

这是查询:

SELECT SUM(CASE WHEN dt='peter' THEN amount ELSE -amount END) 
FROM receipt WHERE dt='peter' OR ct='peter'

我在表中有800k记录。我在dtctamountct,dt上都有索引。此查询需要5分钟(!)。

1 个答案:

答案 0 :(得分:1)

你可以做到

SELECT SUM(s) AS ss
FROM (SELECT SUM(amount) AS s
      FROM receipt
      WHERE dt = 'peter'
      UNION
      SELECT -SUM(amount)
      FROM receipt
      WHERE dt = 'peter')

此查询应该比原始查询运行得更快。否则,您应该规范化dt / ct列以使用连接以获得更好的性能