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

本文介绍了MySQL海量数据优化的方法,包括分页查询优化、普通索引和复合索引优化、SQL查询优化、事务优化及数据库性能优化。通过实例展示了如何提高查询效率,如使用前一次查询的最大ID进行分页,避免数据类型隐式转化,以及如何避免索引失效等技巧。同时,文章还探讨了事务隔离级别、查询缓存的利弊以及分布式场景下的优化手段。
摘要由CSDN通过智能技术生成

一、准备表数据

咱们建一张用户表,表中的字段有用户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进行查询优化是效率最高的方法,但这种方法只适用于下一页点击的这种操作,对于同步全量数据来说建议的方式使用伪列对ID进行分页,然后开启多个线程同时查询,把全量数据加载到缓存,以后面试官问你如何 快速获取海量数据并加载到缓存 你该知道怎么回答了吧。

2.普通索引优化

先来看没索引优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值