拥有一个 Golang 实用程序,能够减少包含历史数据的表中每天的数据点。
记录范围为每天 20 到 400 条记录。总共至少有1亿条记录。
该实用程序能够在给定日期之前将其减少到每天 n 条记录。(n 的范围可以是每天 1 到 300 条记录)
我使用的方法如下:
步骤1:
创建表 main_table_tmp 像 main_table;
第2步:
更改表 main_table_tmp 添加列 timekey INT;
步骤 3:
INSERT INTO main_table_tmp
SELECT * FROM (
SELECT *,FLOOR(UNIX_TIMESTAMP(column_name)/((1440/2)*60)) AS timekey
FROM main_table
WHERE column_name <= '2018-01-01'
GROUP BY timekey
) m
UNION ALL
(SELECT * ,0 As timekey FROM main_table where column_name > 'date') ;
步骤4:
更改表 main_table_tmp 删除列时间键;
DROP TABLE 维护表;
将表 maintable_tmp 重命名为 maintable;
我正在使用 golang 实现上述目标。
func somefuncname(){
----
----
----
q := "CREATE TABLE " + *tablename + "_tmp LIKE " + *tablename + ";"
rows, err := db.Query(q)
if err != nil {
fmt.Println(err)
}
//--ALTER ADD timekey
//--INSERT INTO SELECT *....
//--ALTER DROP timekey ,DROP table and rename
}
当前该查询的响应时间非常慢
部分结果: 总记录: 200 万条
执行时间: 180 秒
这是在 16Gb RAM CPU 上部署在低等级系统上时非常慢
我为解决此问题所采取的步骤:
查看了所有表的索引。尝试删除索引并运行该实用程序。删除索引使实用程序加快了 5 秒,但这也不算多。
分阶段执行实用程序:如果总记录超过 100 万条,则一次运行 100 万条实用程序
但毕竟这些努力看起来主要问题在于查询本身。
只是速度不够快。我只是需要一种方法来提高查询效率
任何帮助表示赞赏,谢谢大家!!
人到中年有点甜
相关分类