0

这是表格:

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'

我在表中有 80 万条记录。我在dtctamount和上有索引ct,dt。目前,此查询需要 5 分钟以上 (!)。

4

1 回答 1

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 列以使用连接以获得更好的性能

于 2013-09-11T11:23:06.557 回答