Assume a table schema like:
name amount_1, amount_2, cond_1, cond_2
the table have 500,000+rows.
How to optimize query like:
select
name
, sum(amount_1) as total_1
, sum(amount_2) as total_2
, sum(amount_1+amount_2) as total
from table_name
where cond_1 in ('a', 'b')
group by name
order by total desc
limit 10;
Current the sql will take minutes to run.
You are likely to be missing indexes on these columns:
namefor the groupingcond_1for the filteringIf you prefer to have a compound index only, I recommend making that an index on
(cond_1, name)(not the other way round). Why?cond_1should be the first column in the compound index as the filter predicate can profit only from the columns on the left of an index.This is explained here, for instance:
http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys