Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用索引提高select查询中聚合函数的速度_Mysql_Sql_Performance_Database Administration - Fatal编程技术网

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

Mysql 使用索引提高select查询中聚合函数的速度,mysql,sql,performance,database-administration,Mysql,Sql,Performance,Database Administration,我需要用源表中度量值列的总和创建一个新表。 源表非常庞大 例如,源表 Category | Product | Sales A | P1 | 100 B | P2 | 200 C | P3 | 300 查询如下: SELECT Category, Product, SUM(Sales) FROM source_table GROUP BY Category. 没有where条件 索引

我需要用源表中度量值列的总和创建一个新表。 源表非常庞大

例如,源表

Category | Product | Sales
A        | P1      | 100 
B        | P2      | 200
C        | P3      | 300
查询如下:

SELECT Category, 
       Product, 
       SUM(Sales) 
FROM source_table 
GROUP BY Category.
没有where条件

索引是否有助于加快进程?

是否有其他加快查询速度的机制?

在类别上添加索引可能会有所帮助,因为它位于GROUP BY子句中。但是你正在做一个完整的表转储,所以它可能会很慢


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

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

1-此列中有多少不同的值。 2-记录总数与不同值的数量之间的比例如何。 3-我多久应用一次本栏中的where、group by或order by子句


正如@Kasey的回答所述,为了便于查看,您可以在category列上添加索引,但是,这取决于该列中不同值的数量。

可能。您需要对查询运行
EXPLAIN
,以查看速度减慢的原因。。。只需
EXPLAIN
,然后是您的查询。我们将查看EXPLAIN语句的输出。在MySQL中运行以下命令,并将输出发布到问题:EXPLAIN SELECT Category、Product、SUM(Sales)从source|U table GROUP BY Category开始,explain语句的输出为:id | select|type | table | type |可能的| key | key | len | ref | rows | EXTRAST | 1 | SIMPLE |新的| isis |间接|索引| NULL | idx |新的|间接| 1915 | NULL | NULL | NULL 124,最好编辑您的原始问题并将其放在那里,以便我们可以阅读。