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

本文介绍了MySQL海量数据的优化策略,包括分页查询优化,如子查询和JOIN方法,以及普通索引和复合索引的优化。此外,还讨论了SQL查询优化,事务优化,数据库性能提升,如开启查询缓存,并提供了表字段和分布式场景下的优化建议。通过这些技巧,可以在面试中自信应对海量数据处理的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备表数据

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

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

CREATE TABLE `t_user` (
  `id` int NOT NULL,
  `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DELIMITER ;;
CREATE PROCEDURE user_insert()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<1000000
DO
INSERT INTO t_user(id, user_name, address,  create_time) VALUES (i, CONCAT('mayun',i), '浙江杭州', now());
SET i=i+1;
END WHILE ;
commit;
END;;
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进行查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值