• MySQL海量数据优化(理论+实战) 吊打面试官


    一、准备表数据

    咱们建一张用户表,表中的字段有用户ID、用户名、地址、记录创建时间,如图所示

    ​OK,接下来准备写一个存储过程插入一百万条数据

    1. CREATE TABLE `t_user` (
    2. `id` int NOT NULL,
    3. `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
    4. `address` varchar(255) DEFAULT NULL,
    5. `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    6. PRIMARY KEY (`id`)
    7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    8. DELIMITER ;;
    9. CREATE PROCEDURE user_insert()
    10. BEGIN
    11. DECLARE i INT DEFAULT 0;
    12. WHILE i<1000000
    13. DO
    14. INSERT INTO t_user(id, user_name, address, create_time) VALUES (i, CONCAT('mayun',i), '浙江杭州', now());
    15. SET i=i+1;
    16. END WHILE ;
    17. commit;
    18. END;;
    19. CALL user_insert();

    插入完后咱们看看数据条数

    二、优化方式

    1.分页查询优化

    OK,咱们看下分页limit到一定值时的耗时是多少

    • limit 1000时

    • limit 10000时

    • limit 100000时

    • limit 1000000时

    ​可以看到limit值越大,耗时越长,这还只是一百万数据,要是千万级、亿级呢?

    OK不废话,咱们马上进行分页优化

    • 的查询优化

    ​可以看到比起之前 limit 1000000时的0.218s 效率提高了很多

    • 使用JOIN分页

    ​可以看到比起之前 limit 1000000时的0.218s 效率也同样提高了很多

    • 使用前一次查询的最大ID

    ​可以看到这种方法效率最高,但依赖于需要知道最大ID,这种适合点击下一页查询(类似于滚动加载数据)的场景

    • 通过伪列对ID进行分页

    ​然后可以开启多个线程去进行最高效率查询语句的批量查询操作 0~10000,10001-20000.... 这样子的话可以快速把全量数据查询出来同步至缓存中。

    分页优化总结:使用前一次查询的最大ID进行查询优化是效率最高的方法,但这种方法只适用于下一页点击的这种操作,对于同步全量数据来说建议的方式使用伪列对ID进行分页,然后开启多个线程同时查询,把全量数据加载到缓存,以后面试官问你如何 快速获取海量数据并加载到缓存 你该知道怎么回答了吧。

    2.普通索引优化

    先来

  • 相关阅读:
    unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计
    软件临界资源访问冲突
    力扣20-有效的括号——栈实现
    38.迪杰斯特拉(Dijkstra)算法
    【精品】商品规格 数据库表 设计
    树莓派忘记密码重置密码的方法
    前端小游戏——植物大战僵尸
    北京十大知名律师事务所最新排名(2022前十公布)
    数据库PostgreSQL PG 字符串拼接,大小写转换,substring
    手把手推导Back Propagation
  • 原文地址:https://blog.csdn.net/Java_zhujia/article/details/128049198