记一次MySql千万级数据量单表按日分组查询平均值的优化遇到的各种问题

1、单表千万级数据量 子查询 where  in 要比 where exists 快(亲测查询时间差了100倍)

2、需要对datetime类型进行group by时(众所周知,函数不走索引),把日期的值拆分,比如要按日进行分组,拆分成 年、月、日字段,类型分别用smallint、tinyint、tinyint,建立复合索引(Year,Month,Day) 

3、数据量不大的临时表的存储引擎用engine=MEMORY ,优化效果很明显。数据量太大的不建议,因为很吃内存,内存不够数据可能会丢失数据或者中断存储过程

4、truncate是先执行drop操作,然后再执行create操作,执行完成后会恢复初始的表空间。(找资料时看到有文章说对于临时表要先truncate再drop,差点被坑死,故有此一记)

 -------------------------------------------后续------------------------------------------------------

到生产环境给表加索引后,过了一晚数据库出故障自动关闭了。正在查找原因。。。

原因大概找到了,有一个作业每10分钟跑一次,作用是从千万级数据量单表处查询数据然后插入到另一个表,这个作业跑一次耗时大于40分钟,跑到中途还报错退出了。。。

然后千万级数据量单表添加字段后也没有初始化好,添加索引的字段存在null值,导致死锁的发生。不断被阻塞,最后导致mysql崩溃了。

 

posted @ 2021-07-07 18:21  老铁你咋这么肥  阅读(808)  评论(0编辑  收藏  举报