表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;
Run Code Online (Sandbox Code Playgroud)
该查询给出了风力涡轮机数据的日平均风速和总功率.在我的测试机这个查询超时10分钟,在一个组合索引执行后STE_ID,PNT_NO,YR,MN,这是唯一的主键列的子集.如果没有索引,查询将在几分钟后完成.
我运行的几乎是MySQL的安装,除了调整服务器之外,我还想了解更多有关处理此问题的其他方法,例如:
为了在GROUP BY查询中获得最佳性能,您必须添加覆盖索引:
ALTER TABLE arg_rec ADD KEY ix1(STE_ID, PNT_NO, YR, MN,AVR_WS, AVR_PW );
Run Code Online (Sandbox Code Playgroud)
对于覆盖索引,您添加:
您可以通过在查询缓存配置中启用查询缓存抢占来缓存MySQL中的查询
您可以将YR,MN,DY,HR,MI,SC存储在具有数据类型的单个列中,TIMESTAMP这样可以提高索引和分组操作的性能.