这是表格:
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记录。我在dt
,ct
,amount
和ct,dt
上都有索引。此查询需要5分钟(!)。
答案 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列以使用连接以获得更好的性能