十亿 mysql 数据优化,主键能否用 uid+雪花算法 id

查看 20|回复 0
作者:petelin   
背景是这样的,有一个 1T 的数据库,里面有 10 亿条数据, 表结构如下
uid status pay_method refund_status create_time amount device_id xxx
业务上对这个库每天会插入几百完数据,qps 高峰在几百,有一些稍微复杂的查询(主要是会查用户全部的数据),索引不能覆盖全,需要回表的时候,IO 会被打的很高。
select sum(amount) from xx where user_id = xx ,status =xx ,pay_method =xx
(比如这个 sql ,查到 5000 行有效数据的话,需要回表因为数据太过分散,需要去 5000 个 page 上查数据,IO 就会很差,这里 buffer pool 完全存不下 1T 的数据,讨论这种冷用户的查询)
我想的一个解决办法是,把 User_id + 雪花算法 id 当作主键,这样用户的数据都在一起,回表就不需要查 5000 个 page ,顺序 io 小几百就 ok 了。
但是 mysql 主键一般是用自增的当作索引,避免空洞和页分裂,业务场景插入 qps 不高,这种方案是更合适的吗 ?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部