系统中有大量用户导致的数据库查询慢
问题分析: 数据过多导致树高增加 MySQL 的默认存储引擎 InnoDB 采用了 B+树的数据结构。3 层树大概能存储 2KW 行数据量,超过了这个数会导致 3 层树变为 4 层树,增加了一次硬盘 IO 读取导致 SQL 变慢。 并发连接数不够 MySQL 的默认最大连接数是 151,可以在 /etc/my.conf 更改。具体可以看文档 max_connections 参数。 超过连接数会出现 too many connections 报错。 解决方案: 分库分表: 将数据按照某个维度水平的切割。 range 范围 例如: 用户 ID [0, 500W) 放库 1 表 1 用户 ID [500W, 1000W) 放库 2 表 2 👆这样会导致例外一个问题。 你会发现用户 ID 小的老用户很多都不上线了,用户 ID 新的用户还是很多,依旧导致了库 2 的连接数还是超了。 因此不能这么简单的通过 ID 的大小去分库分表。 这时候就可以引入了哈希(hash)。 哈希(hash) 哈希的方式可以使得用户 ID 分散到多个库、表上。 ...