使用索引提高选择查询中聚合函数的速度

时间:2013-01-08 07:32:01

标签: mysql sql performance database-administration

我需要创建一个新表,其中包含源表中度量列的总和。 Source表非常庞大。

例如。来源表

Category | Product | Sales
A        | P1      | 100 
B        | P2      | 200
C        | P3      | 300

查询就像:

SELECT Category, 
       Product, 
       SUM(Sales) 
FROM source_table 
GROUP BY Category.

没有任何条件。

索引是否有助于加快流程?
任何加速查询的替代机制?

2 个答案:

答案 0 :(得分:0)

它可能有助于在Category上添加索引,因为它在GROUP BY子句中。但是你正在进行全表转储,所以它可能会很慢。

可能更好的策略是为销售报告创建一个新表,并根据您的业务需求填充该表。如果它只能每天更新,那么安排存储过程每晚运行以重新填充它。如果需要反映表的当前状态,则可以在更新基表时使用触发器更新报表。或者,您可以在应用程序级别运行单独的查询,以在更新基表时更新报表。

答案 1 :(得分:0)

索引是一个棘手的工具。如果您计划将索引添加到表的列中,则至少应考虑:

1-本栏目中有多少个不同的值。 2-如何记录总数与不同值的数量之间的比例。 3-我经常在本栏目中使用where,group by或order by子句。

正如@Kasey的回答所指出的那样,您可以在类别列上添加索引,但是,它取决于您对该列的不同值的数量。