背景
数据库:mysql
数据量:3千万
字段个数:12个字段
大字段:最大bigint
主键索引和field5索引
遇到的问题
1.主键id雪花生成器生成,插入数据的时候到达1200万左右,就异常的缓慢,每秒插入低于100个,无法接受。
2.查询的时候,explain select field1, field2, field3, field4 from tablename where field5= 46100151664131 limit 0,200
查询100条数据接近0.5秒,批量查询10个接近5秒,难以接受
插入慢问题分析
1.为什么插入开始十分的快,后面就慢下来了,原因是什么?
懂得mysql缓存结构的人应该清楚,插入没提交实在内存中存储的,另外主键索引是聚簇索引,b+树叶子节点会存储数据本身,那么随着插入量大于一千多万的时候,内存中的页不能存储所有数据页了,而采用LRU原则保留部分分页数据,insert语句比较大,主键id分布的索引页比较广泛,那么内存就需要频繁的和硬盘交换数据,加载数据页,导致变慢。
解决办法:知道B+树原理就可以知道,主键id递增分页,那么如果我主键id递增,缓存页利用率就