表arg_rec在我的测试机器上包含800K行,通常这个表将保存超过15M行。我想运行以下查询:
SELECT STE_ID, PNT_NO, YR, MN, AVG(AVR_WS) AS AVR_WS, SUM(AVR_PW) FROM arg_rec GROUP BY STE_ID, PNT_NO, YR, MN;
此查询提供风力涡轮机数据的每日平均风速和总功率。在我的测试计算机上,此查询在执行10分钟后超时STE_ID
,PNT_NO
,YR
,MN
,这只是主要的子集关键栏目。没有索引,查询会在几分钟后完成。
我正在运行MySQL安装,除了调整服务器之外,我还想了解更多有关处理此问题的其他方法,例如:
答案 0 :(得分:9)
为了在GROUP BY查询中获得最佳性能,您必须将覆盖索引添加为:
ALTER TABLE arg_rec ADD KEY ix1(STE_ID, PNT_NO, YR, MN,AVR_WS, AVR_PW );
要覆盖索引,请添加:
访问详情:Group By Optmization in MySQL
您可以在Query Cache Configuration启用查询缓存抢劫来缓存MySQL中的查询
您可以将YR,MN,DY,HR,MI,SC存储在数据类型为TIMESTAMP
的单个列中,这样可以提高索引和分组操作的性能。