我有一个查询,其中我总结了几百万行,看起来大致如下:
SELECT
SUM(IF(FlagColumn = 1, dollars, 0)) as booked,
SUM(IF(FlagColumn = 0, dollars, 0)) as billed
FROM
records
WHERE
processedDate BETWEEN ? AND ?
希望有人可以提出一种方法来编写可能有更好性能的方法,因为这个查询非常慢。由于标志列的值会随着时间的推移而发生变化,因此无法提前打破dollars
列,因此会dollars
重新分类。
答案 0 :(得分:1)
在桌面上构建综合索引:records(processedDate, flagcolumn, dollars)
。这是查询的最佳索引。